垂直居中与水平居中总结

985 阅读1分钟

html结构

<!DOCTYPE html>
<html lang="en">
<head>
    <style>
    html,body,.outer{
        width: 100%;
        height: 100%;
        margin: 0;
        padding: 0;
    }
    .inner{
        background: red;
    }
    </style>
</head>
<body>
    <div class="outer">
        <div class="inner">inner</div>
    </div>
</body>
</html>

水平居中

1.行内元素

父元素设置水平居中

.outer{
    text-align: center;
}
.inner{
    display: inline;
}

2.块级元素

当前元素设置 margin: 0 auto;

.inner{
    margin: 0 auto;
    width: 100px;
}

3.若自元素包含浮动

父元素宽度设置位fit-content,配合margin(后需细抠)

.outer{
    width: fit-content;
    margin: 0 auto;
}
.inner{
    float: left;
}

4.使用flex

父元素使用flex布局并设置居中

.outer{
    display: flex;
    justify-content: center;
}

5.使用CSS3的transform属性

当前元素设置绝对定位

.inner{
    position: absolute;
    left: 50%;
    transform: translateX(-50%);
}

6.在知道元素宽度的情况下使用margin

当前元素设置绝对定位与宽度

.inner{
    width: 200px;
    margin-left: -100px;
    left: 50%;
    position: absolute;
}

7.通过绝对定位,同时设置left: 0, right:0; margin: 0 auto;

.inner{
    position: absolute;
    left: 0;
    right: 0;
    margin: auto;
    width: 100px;
}

垂直居中

1.当行文本

.outer{
    line-height: 500px;
    height: 500px;
}
.inner{
    display: inline;
}

2.行内快级元素

元素高度不定,兼容性好(后续细抠)

.outer::after, .inner{
    display: inline-block;
    vertical-align: middle;
}
.outer::after{
    content: '';
    height: 100%;
}

3.vertical-align属性

vertical-align只有在父层为td或者th时,才会生效,对于其他块级元素不支持

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

4.flex

.outer{
    display: flex;
    align-items: center;
}

5.transform

与水平居中相同

6.在知道元素高度的情况下使用margin

与水平居中相同

7.通过绝对定位,同时设置top: 0, bottom:0; margin:auto 0;

.inner{
    position: absolute;
    top: 0;
    bottom: 0;
    margin: auto 0;
    width: 100px;
}