CSS探索系列 元素居中
CSS居中是前端工程师经常要面对的问题,也是基本技能之一。
今天将以往使用过的方法做一个总结,包括水平居中,垂直居中及水平垂直居中方案。本文对一些类似方案进行归类总结,整理结果如下。后面如有新方案,还会陆续的补充进来。
DEMO
<style>
.box {
width: 600px;
height: 300px;
color: #0aa;
border: 1px solid #0aa;
}
.box> .item {
width: 300px;
height: 150px;
margin: 0 auto;
color: #fff;
background: #0aa;
}
</style>
<section class="box">
<div class="item"></div>
</section>水平居中
1.margin:auto
块(block)元素水平居中,子元素 margin: auto。
2.text-align:center
行内(inline-block、inline)元素水平居中。父元素 text-align: center。
垂直居中
3.height + line-height
单行文字垂直居中,父元素height值 === line-height值。
4.幽灵元素
如果一个父元素中,有两个inline-block的子元素,且这两个子元素vertical-align: middle,那么这两个元素在垂直方向是居中的。
思路再扩展下,如果其中一个子元素的高度跟父元素一样,那么这两个子元素,在父元素都是垂直居中了。按此思路,元素垂直居中的实现:给父元素设置一个伪元素,display: inline-block; width: 0; height: 100%,且设置为在页面不可见,我们称这个伪元素为"幽灵元素",通过给幽灵元素和子元素设置 vertical-align: middle 可以实现垂直居中。
注意:子元素宽度为100%时,右侧会有一丝空白。
水平垂直居中
5.table-cell布局
行内元素、单行、多行文字水平垂直居中。
6.flex布局
块元素、行内元素、单行、多行文字水平垂直居中。
7.grid
8.position + 负margin
适用于固定大小的块级元素,margin-left、margin-top为元素宽、高的一半。
9.position + calc()
适用于固定大小的块级元素,calc计算50% - 元素宽或高的一半。
10.position + margin: auto
子元素宽高都小于父元素时,水平垂直居中;子元素宽度大于父元素,水平方向左对齐,垂直方向居中;子元素高度大于父元素,水平方向居中,垂直方向也还是居中的。
11.position + transform
12.background
适用于图片的居中。
13.padding填充
这种常用于父元素大小不固定的场景。
总结
居中实现方案有很多,本人比较常用的是:flex布局、 position + transform。上述水平垂直居中方案中:方案8、方案9只适用于仅居中元素已固定宽高。
最后更新于
这有帮助吗?