CSS居中技巧

水平居中

通用方法,元素宽高未知

适用于子元素为浮动,绝对定位,内联元素,均可水平居中。

CSS3 transform
1
2
3
4
5
6
7
8
.parent {
position: relative;
}
.child {
position: absolute;
left: 50%:
transform: translateX(-50%);
}
Flex
1
2
3
4
.parent {
display: flex;
justify-content: center;
}

居中常规文档流中的内联元素(display:inline)

常见的内联元素有:span, a, img, input, label等等;此方法同样适用于display:inline-block的元素。

1
2
3
.parent {
text-align: center;
}

居中常规文档流中的块元素(display:block)

常见的块元素:div, h1~h6, table, p, ul, li 等等

设置 margin
1
2
3
4
5
6
7
8
9
.parent {
width: 100%;
}
.child {
width: 600px;
height: 50px;
margin: 0 auto;
background: #999;
}
修改为 inline-block属性
1
2
3
4
5
6
.parent {
text-align: center;
}
.child {
display: inline-block;
}

居中浮动元素

1
2
3
4
5
6
7
.child {
width: 100px;
float: left;
position: relative;
left: 50%;
margin-left: -50px;
}

居中绝对定位元素

方法一
1
2
3
4
5
6
7
8
9
.parent {
position: relative;
}
.child {
position: absolute;
width: 100px;
left: 50%;
margin-left: -50px;
}
方法二
1
2
3
4
5
6
7
8
9
10
.parent {
position: relative;
}
.child {
position: absolute;
width: 100px;
left: 0;
right: 0;
margin: 0 auto;
}

垂直居中

通用方法,元素宽高未知

适用于子元素为浮动,绝对定位,内联元素,均可垂直居中。

CSS3 transform
1
2
3
4
5
6
7
8
.parent {
position: relative;
}
.child {
position: absolute;
top: 50%;
transform: translateY(-50%);
}
Flex
1
2
3
4
.parent {
display: flex;
align-items: center;
}

居中单行文本

把文字的 line-height 设为文字父容器的高度,适用于只有一行文字的情况。

1
2
3
4
.text {
line-height: 200px;
height: 200px;
}

已知元素宽高

方法一
1
2
3
4
5
6
7
8
9
.parent {
position: relative;
}
.child{
position: absolute;
top: 50%;
height: 100px;
margin-top: -50px;
}
方法二
1
2
3
4
5
6
7
8
9
10
.parent {
position: relative;
}
.child{
position: absolute;
top: 0;
bottom: 0;
height: 100px;
margin: auto 0;
}

水平垂直居中

绝对定位居中

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
div {
width: 100px;
height: 100px;
margin: auto;
position: fixed;
//absolute is ok
top: 0;
right: 0;
bottom: 0;
left: 0;
}
//优点
不仅可以实现在正中间,还可以在正左方,正右方
元素的宽高支持百分比 %属性值和 min-/max-属性
可以封装为一个公共类,可做弹出层
浏览器支持性好

负边距居中

1
2
3
4
5
6
7
8
9
10
11
12
13
.child {
width: 100px;
height: 100px;
position: absolute;
top: 50%;
left: 50%;
margin-left: -50px;
margin-top: -50px;
}
//特点
良好的跨浏览器特性,兼容 IE6 - IE7
灵活性差,不能自适应,宽高不支持百分比尺寸和 min-/max- 属性

CSS3 transform

1
2
3
4
5
6
7
8
9
10
11
12
.child {
width: 100px;
height: 100px;
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
}
//特点
内容可自适应,可以封装为一个公共类,可做弹出层
可能干扰其他 transform效果

Flexbox

这是 CSS布局未来的趋势;Flexbox是 CSS3新增属性,设计初衷是为了解决像垂直居中这样的常见布局问题。

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

table-cell

适用于子元素 display为 inline-block, inline类型的元素,需要已知父元素的宽高,且父元素的宽高不能设为百分比数。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
.parent {
display: table-cell;
vertical-align: middle;
text-align: center;
width: 200px;
height: 200px;
border: 1px solid red;
}
.child {
width: 100px;
height: 100px;
display: inline-block;
background-color: #03f;
}

font-size配合 vertical-align实现垂直居中

该方法的要点是给父元素设一个合适的 font-size的值,这个值的取值为该父元素的高度除以1.14得到的值,并且子元素必须 是一个 inline或 inline-block元素,需要加上 vertical-align: middle属性。使用这种方法,子元素的宽度或高度都不必知道。

1
2
3
4
5
6
7
8
9
10
11
12
13
.parent {
font-size: 175.4px;
height: 200px;
text-align: center;
}
.child {
vertical-align: middle;
display: inline-block;
font-size: 12px;
width: 50px;
height: 50px;
background-color: #00f;
}

文本内容居中

1
2
3
4
5
.text {
height: 100px;
line-height: 100px;
text-align: center;
}