文章概述
本篇文章记录CSS实现元素水平处置居中的方法收集的笔记。
概述
本文收录css常用到的标签元素水平垂直居中显示样式的设置方法,主要考虑以下两种情况:
- 居中元素固定宽高;
- 居中元素不固定宽高;
固定宽高元素居中
- absolute + 负margin
- absolute + margin auto
- absolute + calc
absolute+负margin
父元素使用相对定位,固定宽高居中元素使用绝对定位,设置margin偏移自身宽高的尺寸即可;
1 | <style> |
absolute+calc函数
父元素使用相对定位,固定宽高居中元素使用绝对定位,设置left、top偏移自身宽高的尺寸即可;
1 | <style> |
absolute+margin auto
父元素使用相对定位,固定宽高居中元素使用绝对定位,设置上下左右偏移为0,同时设置margin:auto即可;
1 | <style> |
拓展
水平居中
可以不使用定位,设置居中元素的margin: 0 auto的方式,使元素水平居中;
1 | <style> |
不固定宽高元素居中
居中的元素宽高不固定的情况
- absolute + transform
- lineheight
- writing-mode
- table
- css-table
- flex
- grid
absolute+transform
父元素使用相对定位,不固定宽高居中元素使用绝对定位,设置css平移属性translate,使元素负方向平移自身宽高的50%;
1 | <style> |
writing-mode
利用writing-mode定义元素的书写排列方式,间接的让子元素水平和垂直居中;
特别注意:居中元素需要设置为行内块元素,确保不独占一行.
1 | <!--完整代码--> |
line-height
设置居中元素的父元素行高line-height固定,并设置居中元素displayt为inline-block来实现垂直方向居中,再设置text-align为水平居中对齐;
特别注意:居中元素需要设置为行内块元素,确保不独占一行.
1 | <style> |
table
tabel单元格中的内容天然支持垂直居中,再设单元格内容水平居中即可;
特别注意:居中元素需要设置为行内块元素,确保不独占一行.
1 | <style> |
table-cell
可以设置居中元素的父元素的display为table-cell单元格样式元素,并设置子元素水平垂直居中,最后设置居中元素为行内块元素即可;
特别注意:居中元素需要设置为行内块元素,确保不独占一行.
1 | <style> |
flexbox
flex弹性盒子布局方式,很容易让元素居中:
1 | <style> |
grid
css新增的grid布局方式,flex的升级版;
1 | <style> |
总结
元素居中方法使用场景:
- PC端有兼容性要求,宽高固定,推荐absolute+负margin;
- PC端有兼容要求,宽高不固定,推荐css-table;
- PC端无兼容性要求,推荐flex;
- 移动端推荐使用flex;
方法 | 居中元素定宽高固定 | PC兼容性 | 移动端兼容性 |
---|---|---|---|
absolute+负margin | 是 | ie6+, chrome4+, firefox2+ | 安卓2.3+, iOS6+ |
absolute+margin auto | 是 | ie6+, chrome4+, firefox2+ | 安卓2.3+, iOS6+ |
absolute+calc | 是 | ie9+, chrome19+, firefox4+ | 安卓4.4+, iOS6+ |
absolute+transform | 否 | ie9+, chrome4+, firefox3.5+ | 安卓3+, iOS6+ |
writing-mode | 否 | ie6+, chrome4+, firefox3.5+ | 安卓2.3+, iOS5.1+ |
lineheight | 否 | ie6+, chrome4+, firefox2+ | 安卓2.3+, iOS6+ |
table | 否 | ie6+, chrome4+, firefox2+ | 安卓2.3+, iOS6+ |
css-table | 否 | ie8+, chrome4+, firefox2+ | 安卓2.3+, iOS6+ |
flex | 否 | ie10+, chrome4+, firefox2+ | 安卓2.3+, iOS6+ |
grid | 否 | ie16, chrome57+, firefox52+ | 安卓6+, iOS10.3+ |