CSS实现水平居中,垂直居中,水平垂直居中(强迫症福利)

前言:

在我们的平常项目里,页面布局中经常要把一些字,图,div等等居中,贴近用户的审美,我们自然也用到了很多种方法去实现,接下来我想做个系统的总结,帮助自己加深记忆,也希望能帮助到你们。

首先给出下列所有例子共有的html结构:外部div:parent+son,son是什么元素看下面具体分析

接下来进入正题

一、元素水平居中

水平居中的方式有很多,但是因为元素不同的特性,它所适用的方法不多,所以下面按不同的元素带出对应的解决方法

1.son是文本/行内元素/行内块级元素

.parent{
    text-align: center;
}

局限性在于只能对行内内容有效,且子元素宽度应该小于父元素宽度,否则无效。

2.son是块级元素

.son{
    margin: 0 auto;
}

3.son是任意元素

a).flex布局

.parent{
    display: flex;/*给父容器开启flex布局*/
    justify-content: center;/*让容器下的布局在主轴居中 */
}

局限在于兼容性不好,但是功能强大

b).transform+absolute

.parent{
    position: relative;
}
.son{
    position: absolute;
    left: 50%;/*先根据父元素偏移他的一半*/
    transform: translateX(-50%);/*再根据自身的宽度反向偏移一半*/
}

就算不知道元素宽高也可以使用,但是transform也是存在兼容性问题(IE9+),而且代码较多;脱离文档流。

c).利用绝对定位元素的特性:宽度由内容撑开

left + right + width + padding + margin =包含块padding区域的

.parent{
    position: relative;
}
.son{
    position: absolute;
    left: 0;
    right: 0;
    margin: 0 auto;
}

  局限性在于需要确定元素的宽高才可以使用。

二、元素垂直居中

同样也是不同的元素适用的情况不同,接下来按需引入

1.son是文本/行内元素/行内块级元素

这里利用line-height,因为line-height的最终表现是通过inline box实现的,而无论inline box所占据的高度是多少(无论比文字大还是比文字小),其占据的空间都是与文字内容公用水平中垂线的。

.parent{
    height: 200px;
    line-height: 200px;/*让line-height=height*/
}

局限性在于需要知道父元素的高度才能使用

2.son是块级元素

可以使用table-cell,使表格内容对齐方式为middle

.parent{
    display: table-cell;
    vertical-align: middle;
}

3.son是任意元素

a).transform+absolute

.parent{
    position: relative;
}
.son{
    position: absolute;
    top: 50%;
    transform: translateY(-50%);
}

  跟水平垂直类似,只改变了方向

b).利用绝对定位元素的特性:高度由内容撑开

top + bottom + height + padding + margin =包含块padding区域的高度

.parent{
    position: relative;
}
.son{
    position: absolute;
    top: 0;
    bottom: 0;
    margin: auto 0;
}

局限性同样也是需要知道元素的高度才能计算出

c).flex布局

.parent{
    display: flex;
    align-items: center;/*让项目在侧轴方向居中*/
}

三、元素水平垂直居中

有了上面的基础,水平垂直居中其实就是上面的组合,下面举几个常用的组合:

1.flex实现垂直居中

.parent{
    display: flex;
    align-items: center;/*让项目在侧轴方向居中*/
    justify-content: center;/*让项目在主轴方向居中*/
}

可以适用任意情况,唯一的不足是兼容性不佳

2.利用绝对定位的特性:宽高由内容撑开

.parent{
    position: relative;
}
.son{
    position: absolute;
    top: 0;
    bottom: 0;
    left: 0;
    right: 0;
    margin: auto;
}

  3.文本/行内元素/行内块级元素专属

.parent{
    height: 200px;
    text-align: center;
    line-height: 200px;
}

  当然还有其他的组合形式,大家可以自由发挥试一试

posted @ 2020-10-19 16:13  白马过平川Z  阅读(171)  评论(0)    收藏  举报