为了方便代码演示,容器 .box
等样式如下:
1 | .box { |
不脱离文档流
利用line-height
此方法关键是把行高设置成和容器高度相同
aaaaa
1 | <style> |
优点:简单,方便,兼容所有浏览器。
缺点:只支持单行,主要适用于单行文本。
table 方式
table
的单元格是天生支持垂直居中的容器,其它标签可以设置 display
达到相同效果
sdfsdfd1111111111111s
sdfsdfds
sdfsdfds
sdfsdfds
sdfsdfds
1 | <style> |
优点:支持多行,兼容所有浏览器。
缺点:IE7以下要用table
标签,嵌套太多; 单元格属性与普通容器行为有差异。
vertical-align
1212
1 | <style> |
优点:文本和其它内联元素混排时,垂直居中效果好;兼容所有浏览器;
缺点:不支持多行;IE8以下需要添加一个额外的空标签(替代伪元素)才能达到最好效果;
flex-box 布局
css3 中新增的布局方式, 解决了很多css2布局中的痛点, 垂直居中只是小意思
1111
aaaaaaa
1 | <style> |
优点:支持多行,flex布局是一种趋势,并有很多新特性;
缺点:IE10+才支持flex布局
grid 布局
一种网格思维的新布局方式, 垂直居中同样没问题, grid
还处于草案阶段
1 | <style> |
优点:支持多行,并有很多新特性;
缺点:兼容性差,grid
还处于草案阶段
脱离文档流
这里只演示 absolute
定位的元素,同样适用 fixed
定位的元素
margin负值
1 | <style> |
优点:兼容好;
缺点:元素需要固定尺寸;
CSS3移位法
1 | <style> |
优点:元素可以不定宽高;
缺点:用到CSS3;可能会碰到渲染模糊的情况;
margin auto
普通块元素可以用 margin: 0 auto;
实现水平居中,现在用同样的原理来垂直居中,因为要配 right
bottom
,所以不支持IE6
1 | <style> |
优点:居中效果,兼容好;
缺点:需要标明尺寸,不支持被内容撑大的容器;极限情况下(元素比容器大时),元素不居中;
总结
方法 | 脱离文档流 | 多行支持 | 尺寸变化支持 | 兼容性 | 使用 |
---|---|---|---|---|---|
利用line-height | ✘ | ✘ | ✔ | all | 常用 |
table | ✘ | ✔ | ✔ | all | 不常用 |
vertical-align | ✘ | ✔ | ✔ | all | 推荐 |
flex | flex流 | ✔ | ✔ | IE10+ | 推荐 |
grid | grid流 | ✔ | ✔ | IE10+ | 不推荐 |
margin负值 | ✔ | ✘ | ✘ | all | 常用 |
CSS3移位法 | ✔ | ✘ | ✔ | IE9+ | 常用 |
margin auto | ✔ | ✘ | ✔ | IE7+ | 推荐 |