元素主要分为块级元素和行内元素,所以对元素进行水平居中也分这两种情况来讨论。
一. 行内元素
常用行内元素为a/img/input/span 等,标签内的HTML文本也属于此类。对于此类情况,水平居中是通过给父元素设置 text-align:center来实现的。
这种方法可以让 inline/inline-block/inline-table/inline/flex 等类型的元素实现居中。
html结构:
<body>
<div class="txtCenter">
Hello World!!!
</div>
</body>
css样式:
<style>
div.txtCenter{
text-align:center;
}
</style>
二、块级元素
块级元素宽度固定
html部分:
<body>
<div class="pagination">
<ul>
<li><a href="#">Prev</a></li>
<li><a href="#">1</a></li>
<li><a href="#">2</a></li>
<li><a href="#">3</a></li>
<li><a href="#">4</a></li>
<li><a href="#">5</a></li>
<li><a href="#">Next</a></li>
</ul>
</div>
</body>
css样式部分:
/* 分页容器上定义一个宽度,然后配合margin的左右值为“auto”实现 */
.pagination{
width: 293px;
margin-left: auto;
margin-right: auto;
}
.pagination li{
line-height: 25px;
list-style: none;
display: inline-block;
margin:0 5px;
}
.pagination a{
display: block;
color: #f2f2f2;
padding:0 10px;
border-radius: 2px;
background:#2f3032;
text-decoration: none;
}
.pagination a:hover{
text-decoration: none;
background: #c87100
}
html部分:
<body>
<div class="main">
<h1>MAIN</h1>
</div>
</body>
css样式部分:
*{
padding:0;
margin:0;
}
body{
background: palevioletred;
}
/* 下面是第一种方法
div使用绝对布局,设置margin:auto;并设置top、left、right、bottom的值相等即可,不一定要都是0。 */
/* .main{
text-align: center;
background-color: #fff;
width: 300px;
height: 350px;
position: absolute;
top: 0;
left: 0;
right: 0;
bottom: 0;
margin:auto;
} */
/* 下面是第二种方法
仍然是绝对布局,让left和top都是50%,这在水平方向上让div的最左与屏幕的最左相距50%,垂直方向上一样,所以再用transform向左(上)平移它自己宽度(高度)的50%,也就达到居中效果了*/
/* .main{
text-align: center;
background-color: #fff;
border-radius: 20px;
width: 300px;
height: 350px;
position: absolute;
left: 50%;
top: 50%;
transform: translate(-50%,-50%);
} */
/* 下面是第三种方法
仍然是绝对布局,让left和top都是50%,这在水平方向上让div的最左与屏幕的最左相距50%,垂直方向上一样,所以再用calc()计算*/
.main{
text-align: center;
background-color: #fff;
border-radius: 20px;
width: 300px;
height: 350px;
position: absolute;
top: calc(50% - 350px/2);
left: calc(50% - 300px/2);
}
块级元素宽度不固定
html部分:
<body>
<div class="pagination">
<ul>
<li><a href="#">Prev</a></li>
<li><a href="#">1</a></li>
<li><a href="#">2</a></li>
<li><a href="#">3</a></li>
<li><a href="#">4</a></li>
<li><a href="#">5</a></li>
<li><a href="#">Next</a></li>
</ul>
</div>
</body>
css样式部分:
* {
padding: 0;
margin: 0;
}
/* 下面是第二种方法:inline-block实现水平居中方法 */
/* .pagination{
text-align: center;
}
.pagination li{
line-height: 25px;
list-style: none;
display: inline-block;
margin:0 5px;
}
.pagination a{
display: block;
color: #f2f2f2;
padding:0 10px;
border-radius: 2px;
background:#2f3032;
text-decoration: none;
}
.pagination a:hover{
text-decoration: none;
background: #c87100
} */
/* 关键点:子元素设置display:inline-block;父元素设置text-align:center;
缺点:使用了inline-block解决了水平居中的问题,但分页项与分页项由回车符带来了空白间距 */
/* 下面是第三种方法:浮动实现水平居中的方法 */
/* .pagination{
width: 100%;
}
.pagination ul{
position: relative;
float: left;
left:50%;
clear: both;
text-align: center;
}
.pagination li{
position: relative;
float: left;
right:50%;
line-height: 25px;
list-style: none;
margin:0 10px;
}
.pagination a{
display: block;
color: #f2f2f2;
padding:0 10px;
border-radius: 2px;
background:#2f3032;
text-decoration: none;
}
.pagination a:hover{
text-decoration: none;
background: #c87100
} */
/* 总结:使用了浮动配合position定位实现。
没有浮动的div是一个块元素,其默认的宽度就是100%,如果div设置了浮动之后,他的内容有多宽度就会撑开有多大的容器(除显式设置元素宽度值之外),这是我们实现让分页导航居中的关键所在。同时元素设置position:relative;它的定位是相对自己大小来定的,比如:left:50%;是相对其宽度的50%向左边移动。
缺点:实现原理较复杂
*/
/* 下面是第四种方法:绝对定位实现水平居中,这个方法无法自适应设备宽度 */
/* .pagination{
position: relative;
width: 100%;
}
.pagination ul{
position: absolute;
left: 50%;
}
.pagination li{
position: relative;
float: left;
right:50%;
line-height: 25px;
list-style: none;
margin:0 10px;
}
.pagination a{
display: block;
color: #f2f2f2;
padding:0 10px;
border-radius: 2px;
background:#2f3032;
text-decoration: none;
}
.pagination a:hover{
text-decoration: none;
background: #c87100
} */
/* 下面是第五种方法:CSS3的flex实现水平居中方法 ,CSS3的flex是一个很强大的功能,她能让我们的布局变得更加灵活与方便,唯一的就是目前浏览器的兼容性较差*/
/* .pagination{
display: flex;
justify-content:center;
}
.pagination li{
float: left;
line-height: 25px;
list-style: none;
margin:0 10px;
}
.pagination a{
display: block;
color: #f2f2f2;
padding:0 10px;
border-radius: 2px;
background:#2f3032;
text-decoration: none;
}
.pagination a:hover{
text-decoration: none;
background: #c87100
} */
/* 下面是第六种方法:CSS3的fit-content实现水平居中方法,“fit-content”是CSS中给“width”属性新加的一个属性值,他配合margin可以轻松的实现水平居中的效果*/
.pagination {
width: fit-content;
margin-left: auto;
margin-right: auto;
}
.pagination li {
float: left;
line-height: 25px;
list-style: none;
margin: 0 10px;
}
.pagination a {
display: block;
color: #f2f2f2;
padding: 0 10px;
border-radius: 2px;
background: #2f3032;
text-decoration: none;
}
.pagination a:hover {
text-decoration: none;
background: #c87100
}