CSS 居中对齐
CSS 居中对齐相关的问题和总结。
水平居中
水平居中行级元素或行盒(display 为 inline 或 inline-*)
.parent { text-align: center; }
水平居中块级元素(display 为 block)
// 块级元素默认占满全部宽度,所以要设置 width
.element {
margin: 0, auto;
width: 100px;
}
水平居中多个块级元素
块级元素默认堆叠排列,想要在一行上排列多个跨级元素,要将 display 设置为 inline-block.
.parent { text-align: center; }
.child {
display: inline-block;
}
或者可以用flex布局:
.parent {
display: flex;
justify-content: center;
}
垂直居中
CSS 中有 vertical-align 这个属性,顾名思义就是垂直居中,那么是不是用这个属性就好。很遗憾不可以,这个属性指定行内元素与行基线的对齐方式,也就是说它的作用范围在一行上,并不适合在块级元素里面垂直居中对齐子元素。当然也有例外,下面会提到。
垂直居中行级元素
单行
可以设置上下相等的padding:
.element { padding: 20px 0; }
或者指定 line-height 等于 height:
.center-text {
height: 100px;
line-height: 100px;
}
多行
多行的情况也可以设置上下的padding。
或者可以设置 display 为 table,对于 table-cell 而言 vertical-align 确实是垂直居中的,这就是前面提到的特列。
.parent {
display: table;
}
.child {
display: table-cell;
vertical-align: middle;
}
当然flex布局也可以轻松的实现:
.parent {
display: flex;
flex-direction: column;
justify-content: center;
height: 200px;
}
另外还有一种使用CSS伪元素的实现方式:
.parent:before {
content: ' ';
display: inline-block;
height: 100%;
vertical-align: middle;
}
.child {
display: inline-block;
vertical-align: middle;
}
垂直居中块级元素
高度已知
.parent {
postion: relative;
}
.child {
position: absolute;
top: 50%;
height: 100px;
margin-top: -50px;
}
高度未知
.parent { position: relative; }
.child {
position: absolute;
top: 50%;
transform: translateY(-50%);
}
或者使用flex布局。
绝对居中(同时水平和垂直居中)
高度宽度已知
.parent { position: relative; }
.child {
width: 300px;
height: 100px;
padding: 20px;
position: absolute;
top: 50%;
left: 50%;
margin: -70px 0 0 - 170px;
}
高度宽度未知
.parent { position : relative; }
.child {
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
}
flex布局
.flex-parent {
display: flex;
justify-content: center;
align-items: center;
}
总结
CSS 中有很多的方式可以实现居中对齐,包括水平居中和垂直居中,只是需要在不同情况下找到合适的方法。另外flex布局设计的更清晰,功能更强大,所以允许的话多考虑flex布局的方式。