(1)使用 text-align:把父元素设置为:text-align: center
该方法均适用于行内元素、行内块元素、块级元素。
注意:如果块级元素设置了宽度,则需要把块级元素设置为行内元素或行内块元素:display: inline 或 display: inline-block;
(2)使用 margin:把元素设置为:margin: 0 auto
注意:使用该方法,必须设置元素的宽度 width,否则无效。
如果是行内元素或行内块元素,需要将其设置为块级元素:display: block;
如果是块级元素,无需再做改动。
(3)使用 position 和 transform:
把父元素设置为:position: relative;
把元素设置为:position: absolute;left: 50%;transform: translateX(-50%)
或者把 transform: translateX(-50%) 替换为 margin-left:- 元素宽度的一半px(注意有负号)
该方法均适用于行内元素、行内块元素、块级元素。此时,块级元素表现的就像行内块元素一样。
注意:行内元素无法设置宽高,它的宽高由其内容的宽高决定,只能使用 transform 实现。
块级元素和行内块元素如果不设置宽高,他们的宽高由其内容的宽高决定,只能使用 transform 实现;如果设置了宽度,还能使用 margin-left 实现。
(4)使用 flexbox 布局:把父元素设置为:display: flex;justify-content: center
该方法均适用于行内元素、行内块元素、块级元素。此时,块级元素表现的就像行内块元素一样。
注意:行内元素无法设置宽高,它的宽度由其内容的长度决定;高度由父元素的高度决定。
块级元素和行内块元素如果不设置宽高,他们的宽度由其内容的长度决定;高度由父元素的高度决定。
(1)使用 padding:把父元素设置为:padding:任意值px 0
该方法均适用于行内元素、行内块元素、块级元素。
注意:该方法适用于父元素没有设置具体高度的情况。
(2)使用 line-height:
该方法均适用于行内元素、行内块元素、块级元素。
注意:当元素中有 p 元素时,最好再将该元素设置为 margin:0 。
添加元素设置为:line-height: 1.5 ;display: inline-block ;vertical-align: middle
(3)使用 position 和 transform:
把父元素设置为:position: relative;
把元素设置为:position: absolute;top: 50%;transform: translateY(-50%)
或者把 transform: translateY(-50%) 替换为 margin-top:- 元素高度的一半px(注意有负号)
注意:该方法均适用于行内元素、行内块元素、块级元素。此时,块级元素表现的就像行内块元素一样。
行内元素无法设置宽高,它的宽高由其内容的宽高决定,只能使用 transform 实现。
块级元素和行内块元素如果不设置宽高,他们的宽高由其内容的宽高决定,只能使用 transform 实现;如果设置了宽度,还能使用 margin-top 实现。
(4)使用 flexbox 布局:把父元素设置为:display: flex;align-items: center
注意:该方法均适用于行内元素、行内块元素、块级元素。此时,块级元素表现的就像行内块元素一样。
行内元素无法设置宽高,它的宽高由其内容的宽高决定。
块级元素和行内块元素如果不设置宽高,他们的宽高由其内容的宽高决定。
(5)使用 table:把父元素设置为:display: table;
把子元素设置为:display: table-cell; vertical-align: middle;
该方法适用于行内元素和块级元素,但不适用于行内块元素。
注意:如果只有一个元素,该元素将会覆盖整个父元素,且设置的宽高将不再起作用。
如果不只一个元素,且所有元素的宽度和不会超过父元素的宽度时,那么块级元素的宽度会起作用,否则还是不起作用。
(1)使用 padding:在垂直居中的基础上,把父元素设置为:text-align: center
(2)使用 line-height:在垂直居中的基础上,把父元素设置为:text-align: center
(3)使用 position 和 transform:
把父元素设置为:position: relative;
把元素设置为:position: absolute;left: 50%;top: 50%;transform: translate(-50%, -50%)
或者把 transform: translate(-50%, -50%) 替换为 margin:- 块级元素高度的一半px 0 0 - 块级元素宽度的一半px
注意:该方法均适用于行内元素、行内块元素、块级元素。此时,块级元素表现的就像行内块元素一样。
行内元素无法设置宽高,它的宽高由其内容的宽高决定,只能使用 transform 实现。
块级元素和行内块元素如果不设置宽高,他们的宽高由其内容的宽高决定,只能使用 transform 实现;如果设置了宽度,还能使用 margin 实现。
(4)使用 flexbox 布局:把父元素设置为:display: flex;justify-content: center;align-items: center
注意:该方法均适用于行内元素、行内块元素、块级元素。此时,块级元素表现的就像行内块元素一样。
行内元素无法设置宽高,它的宽高由其内容的宽高决定。
块级元素和行内块元素如果不设置宽高,他们的宽高由其内容的宽高决定。
(5)使用 table:把父元素设置为:display: table; text-align: center;
把子元素设置为:display: table-cell; vertical-align: middle;
该方法适用于行内元素和块级元素,但不适用于行内块元素。
注意:如果只有一个元素,该元素将会覆盖整个父元素,且设置的宽高将不再起作用。
如果不只一个元素,且所有元素的宽度和不会超过父元素的宽度时,那么块级元素的宽度会起作用,否则还是不起作用。
参考:
菜鸟教程对齐
阮一峰Flex布局
CSS水平垂直居中常见方法总结
CSS水平居中、垂直居中、水平垂直居中
END