纯CSS实现元素水平垂直居中的方法

垂直居中是布局中十分常见的效果之一,为实现良好的兼容性,PC端实现垂直居中的方法一般是通过绝对定位,table-cell,负边距等方法。有了css3,针对移动端的垂直居中就更加多样化。

笔者在这里总结了九种使用纯CSS实现水平垂直居中的方法

OK. Let’s see it!

最开始, 我们先设置几个盒子, 设置它们的统一样式为以下

1
2
3
4
5
6
.box {
width: 300px;
height: 300px;
margin: 10px;
box-shadow: 2px 3px 4px #000;
}

方法1: table-cell

1
2
3
4
<!-- HTML -->
<div class="box box1">
<span>垂直居中</span>
</div>

整体的结构是相当简单的, css直接设置本身的宽高, 然后设置为table-cell,并将对齐方式设置为vertic-align就可以实现水平垂直居中了

1
2
3
4
5
6
7
/* CSS */

.box1{
display: table-cell;
vertical-align: middle;
text-align: center;
}

实际上table-cell的兼容性也是相当不错的, 可兼容至IE8+, 相当于将这个区块设置成了一个td

方法2: display: flex;

1
2
3
4
5
.box2{
display: flex;
justify-content:center;
align-items:Center;
}

使用flex布局就非常简单了, 只需要设置两个属性即可, 存在的问题就是兼容性很有限, 虽然非常简单, 一般使用在移动端

方法3 绝对定位和负边距

这个在以前算是比较中规中矩的办法了, 首先需要将父盒子设置为相对定位, 子盒子设置为绝对定位

1
2
3
4
5
6
7
8
9
10
11
12
13
.box3 {
position:relative;
}
.box3 span {
position: absolute;
width:100px;
height: 50px;
top:50%;
left:50%;
margin-left:-50px;
margin-top:-25px;
text-align: center;
}

原理也非常简单, 将定位到中间距左部和顶部50%之后,需要减去自身的长宽的一半,就实现居中了

方法4: 绝对定位和0

这种方法常用于做蒙层和遮罩效果

1
2
3
4
5
6
7
8
9
10
11
12
.box4 span{
width: 50%;
height: 50%;
background: #000;
overflow: auto;
margin: auto;
position: absolute;
top: 0;
left: 0;
bottom: 0;
right: 0;
}

利用绝对定位上下左右都设为0, 中间的子盒子设置margin为auto实现

方法5: translate

1
2
3
4
5
6
7
8
9
10
11
.box6 {
position: relative;
}
.box6 span {
position: absolute;
top:50%;
left:50%;
width:100%;
transform:translate(-50%,-50%);
text-align: center;
}

利用CSS3的转换效果, 将自身的位置向左上分别移动了50%, 也就是自身的一半, 就实现居中了

方法6:display:inline-block

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
.box7 {
text-align:center;
font-size:0;
}
.box7 span {
vertical-align:middle;
display:inline-block;
font-size:16px;
}
.box7:after {
content:'';
width:0;
height:100%;
display:inline-block;
vertical-align:middle;
}

这个方法就比较复杂一些了, 通过一个没有任何内容但高度为100%的伪类来进行占位, 根据vertical-align的特性, 来进行居中

方法7:display:flex和margin:auto

1
2
3
4
5
6
7
.box8 {
display: flex;
text-align: center;
}
.box8 span {
margin: auto;
}

方法8:display:-webkit-box

1
2
3
4
5
6
7
.box9 {
display: -webkit-box;
-webkit-box-pack:center;
-webkit-box-align:center;
-webkit-box-orient: vertical;
text-align: center
}

方法9:display:-webkit-box

这种方法,在 content 元素外插入一个 div。设置此 div height:50%; margin-bottom:-contentheight;。

content 清除浮动,并显示在中间。

1
2
<div class="floater"></div>  
<div class="content"> Content here </div>
1
2
3
4
5
6
7
8
9
10
.floater {
float:left;
height:50%;
margin-bottom:-120px;
}
.content {
clear:both;
height:240px;
position:relative;
}

(后两种居中方法摘自网络)

文章目录
  1. 1. 方法1: table-cell
  2. 2. 方法2: display: flex;
  3. 3. 方法3 绝对定位和负边距
  4. 4. 方法4: 绝对定位和0
  5. 5. 方法6:display:inline-block
  6. 6. 方法7:display:flex和margin:auto
  7. 7. 方法8:display:-webkit-box
  8. 8. 方法9:display:-webkit-box
|