老生常谈,水平垂直居中。为什么大家都爱水平垂直居中呢?
基本HTML
1 | <div class="father"> |
根据如上结构,通过css实现水平垂直居中。
绝对定位
利用父元素相对定位和子元素绝对定位进行水平垂直居中。根据是否知道子元素宽高,使用数值或者百分比的方式进行定位。
方法1
1 | .father { |
通过设置四向为0和margin: auto
实现。
方法2
1 | .father { |
通过设置left
和top
使child左上角位置移动到中间,然后再移动自身宽高一般使child中心至中间。
方法3
1 | .father { |
方法4
1 | .father { |
总结
这几种方法使用了绝对定位,margin或者transform来使子元素水平垂直居中,根据是否知道具体宽高来使用margin或者transform。
##弹性盒子
方法5
1 | .father { |
方法6
1 | .father { |
总结
这两种使用了flex弹性盒子布局来实现,随着浏览器兼容性的普及,弹性盒子也越来流行了。
table-cell
方法7
1 | .father { |
使用了table-cell以及行内块元素来实现
行内元素
方法8
1 | .father { |
利用伪元素撑开高度垂直居中。
方法9
1 | .father { |
利用父元素line-height
与inline-block子元素vertical-align
垂直居中
相对定位
方法10
是不是有点疑惑为啥1、2、3都要用absolute
来定位,用relative
不行吗?
答案是可以的。😂
1 | .father { |
方法11
1 | .father { |
总结
其实要想水还很再水出方法12、方法13等等,但是主要问题并不在这里,我觉得大家都喜欢问垂直居中问题的主要目的,还是想考验大家对基础css的了解,定位、布局、元素等,比如说相对布局和绝对布局,比如说块级元素和行内元素,比如说margin和padding,比如说百分比的参照者,比如说伪元素的运用,比如说transform用法等等。
最主要考察的是对这些基础实际运用能力和理解能力,并不是说面试官真的想知道你了解多少种垂直居中的方法,他只是想了解一下面试者css的基础罢了。
随手一个方法12
1 | .father { |