HTML+CSS33 关于居中的总结
关于CSS中水平、垂直居中的总结
准备工作
HTML结构:
1 | <div class="container"> |
公共样式:
1 | .container { |
水平居中的方法
(1)使用text-align: center
对于行内元素,可以直接使用text-align: center
来水平居中
1 | .container { |
(2)使用margin: 0 auto
对于宽度确定的块级元素,可以使用margin: 0 auto
来水平居中,原理和后面的绝对定位加margin: auto
的原理类似,后面单独结合总结。
1 | .text { |
(3)flex布局
如果不考虑兼容性,很完美的方案:
1 | .container { |
(4)grid布局
显然兼容性有着问题的方案:
1 | .container { |
(5)绝对定位+移动
父元素相对定位,子元素绝对定位,并且使用transfrom
移动自身宽度的-50%
(如果子元素的高度已知也可以通过margin
向左移动自身高度的一半
1 | .container { |
(6)绝对定位和margin: auto
1 | .container { |
一定要指定子元素的宽度,否则子元素就会充满父元素
垂直居中的方法
(1)vertical-align: middle
针对行内元素,并且需要有一个兄弟行内元素,撑满父元素:
1 | .container:after { |
(2)line-height
=== height
让父元素的height
和line-height
相等,一般适用于文字的居中
1 | .container { |
(3)padding
适用于父元素高度不确定,或者说父元素高度是根据子元素高度确定的情况:
1 | /* container 不能指定 height */ |
(4)绝对定位+移动
父元素相对定位,子元素绝对定位,并且使用transfrom
移动自身高度的-50%
(如果子元素的高度已知也可以通过margin
向上移动自身高度的一半
1 | .container { |
(5)flex布局
如果不考虑兼容性,很完美的方案:
1 | .container { |
(6)grid布局
显然兼容性有着问题的方案:
1 | .container { |
(7)display: table-cell
+ vertical-align: middle
1 | .container { |
平时没怎么用,不知道有什么缺点呢~
(8)绝对定位和margin: auto
1 | .container { |
一定要指定子元素的高度,否则子元素就会充满父元素。
利用margin: auto
居中的原理
1 | .father { |
- 优点:兼容性好
- 缺点:子元素需要指定宽高(否则会充满父元素)
原理:以水平方向举例,垂直方向相同。
当绝对定位的元素只定义了一个方向属性时(比如left
),并且元素没有利用width
指定宽度,宽度是0
;当同时指定了相反的两个方向的属性时且相等(left
和right
都为0
),此时如果没有指定width
,则宽度会充满父元素,自定宽度会沿着left
摆放。
此时指定marign
:
- 如果一侧定值,一侧
auto
,auto
为剩余空间大小 - 如果两侧均是
auto
,则平分剩余空间,所以就居中了。
块级元素利用margin: 0 auto
水平居中的原理也是这样。