首页 > 代码库 > 居中(水平+垂直,浮动+定位,定宽+不定宽)

居中(水平+垂直,浮动+定位,定宽+不定宽)

元素居中,是前端工作者一个老生常谈的话题,网上相关的资料很多,不同的人有不同的理解(不排除有直接copy的),这里我从实际项目需求出发,经过多次试验和总结,得出以下几种居中方法供大家试用并指正:

1. 单纯只是水平居中:

(1)元素宽度已知的情况下,假设为200px,可以采用定位+负的外边距,代码如下:

.container{position:relative}
.box{position:absolute;left:50%; margin-left:-100px;}

(2)元素宽度未知或者无法直接读取,可以采用文本居中,代码如下:

.container{text-align:center}
.box{display:inline-block}

(3)如果是水平居中一个浮动元素,需要在元素外层以及容器中间套一层div,代码如下:

.box-wrap{float:left;position:relative;left:50%}
.box{float:left;position:relative;left:-50%}

注意:上述的.box-wrap并不是起始的外层父元素,而是重新生成的一层嵌套元素,另外.box的left:-50%可以换成right:50%

2. 单纯只是垂直居中:

(1)元素高度已知的情况下,与上述元素宽度已知的情况类似,也是采用定位+负的外边距(只是将left换成了top)

(2)元素高度未知或者无法直接读取,可以采用文本居中,代码如下:

.container{height:500px;line-height:500px}
.box{display:inline-box;vertical-align:middle}

(3)元素高度未知或者无法直接读取,也可以采用在要居中的元素之前设置一个空的行内标签,假设为<span>,代码如下:

span{display:inline-block;width:0;height:100%;vertical-align:middle}
.box{display:inline-block;vertical-align:middle}

3. 同时满足水平和垂直方向的居中:

(1)元素宽度和高度已知的情况下,采用定位+负的外边距

(2)元素宽度和高度未知或者无法直接读取,并且没有浮动,可以采用flex布局,给父元素设置了display:flex后,目标子元素直接就是margin:auto

(3)对于浮动元素,也可以采用flex布局,代码如下:

.container{display:flex}
.box{justify-content:center;align-items:center}

注意:flex布局在低版本的ie中不适用,但是实现居中效果最为高效和便捷;

网上有人用到table和table-cell的布局方法,同样可以实现居中,但我不提倡,原因两点:一是涉及到三层嵌套,二是使用table重在表格展示,而不是网页布局

居中(水平+垂直,浮动+定位,定宽+不定宽)