关于CSS实现水平、垂直居中的问题

526 阅读2分钟

CSS实现水平垂直居中的方式有很多,对此总结了一下区别:

1.absolute+负margin: 比较常用的方法,缺点是要知道子元素的宽高。

父级:position: relative;

子级:position: absolute;top: 50%;left: 50%;margin-left: - 宽度的一半; margin-top: - 宽度的一半;

2.absolute+margin auto: 缺点是要知道子元素的宽高。

父级:position: relative;

子级:position: absolute;top: 0;left: 0;right: 0;bottom: 0;margin: auto;

3.flex: 只需父级样式就可以。移动端可以使用,pc端要看自己业务的兼容性情况。

父级: display: flex; justify-content: center; align-items: center;

4. absolute+transform: 这种方法兼容性依赖 translate2d 的兼容性。

父级: position: relative;

子级: position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%);

5. absolute+calc: 依赖calc的兼容性,缺点是要知道子元素的宽高。

父级: position: relative;

子级: position: absolute; top: calc( 50% - 宽度的一半 ); left: calc( 50% - 宽度的一半 );

6. lineheight: 利用行内元素居中属性,通过text-align做到水平方向居中,vertical-align做到垂直方向居中。

父级: line-height: 父级的高度; text-align:center; font-size:0px;
子级: font-size: 16px; display: inline-block; vertical-align: middle;line-height: intial; text-align: left;

7. css-table: 兼容性好,利用css的table属性。

父级: display: table-cell;text-align: center; vertical-align: middle;

子级: display: inline-block;

以下是不推荐,但能实现:

8. table: dom结构的代码太冗余,而且也不是table的正确用法。

父级: text-align: center;

子级: display: inline-block;

9. grid: 网格布局,兼容性不如flex,不推荐使用。

父级: display: grid;

子级:align-self: center; justify-self: center;

10. writing-mode: 可以改变文字的显示方向,可以变为垂直方向,但是用在div水平垂直居中上会代码太多,麻烦一点。实现起来和理解起来都有些复杂。不推荐。

嘤嘤嘤~~

大概就这么些,还是习惯用flex来实现。