元素垂直居中的方法

194 阅读1分钟

absolute + 负margin

必须知道居中元素宽高,绝对定位是居于子元素左上角,所以利用负值拉扯回子元素宽度的一半

元素垂直居中

.wrap {
    border: 1px solid red;
    width: 300px;
    height: 300px;
    position: relative;
}

.size{
     width: 100px;
    height: 100px;
}

.box {
    background: green;
    position: absolute;
    top: 50%;
    left: 50%;
    margin-top: -50px;
    margin-left: -50px;
}

absolute + margin auto

这种方式通过设置各个方向的距离都是0,此时再讲margin设为auto,就可以在各个方向上居中了

top: 0;
left: 0;
right: 0;
bottom: 0;
margin: auto;

absolute + calc

top的百分比是基于元素的左上角,那么在减去宽度的一半就好了

top: calc(50% - 50px);
left: calc(50% - 50px);

absolute + transform

不需要子元素固定宽高

top: 50%;
left: 50%;
transform: translate(-50%,-50%);

line-height

.wrap {
    border: 1px solid red;
    width: 300px;
    height: 300px;
    line-height: 300px;
    font-size: 0;
    text-align: center;
}

.box {
    font-size: 16px;
    background: green;
    display: inline-block;
    vertical-align: middle;
    
}

table-cell

.wrap {
    border: 1px solid red;
    width: 300px;
    height: 300px;
    display: table-cell;
    text-align: center;
    vertical-align: middle;
}

/* .size{
    width: 100px;
    height: 100px;
} */

.box {
    
    display: inline-block;
}

flex

.wrap {
    border: 1px solid red;
    width: 300px;
    height: 300px;
    display: flex;
    justify-content: center;
    align-items: center;
}

grid 不推荐

.wrap {
    border: 1px solid red;
    width: 300px;
    height: 300px;
    display: grid;
}

/* .size{
    width: 100px;
    height: 100px;
} */

.box {
    align-self: center;
    justify-self: center;
}

writing-mode

<div class="wrap">
    <div class="wrap_inner">
        <div class="box size">元素垂直居中</div>
    </div>
</div>

.wrap {
    border: 1px solid red;
    width: 300px;
    height: 300px;
    text-align: center;
    writing-mode: vertical-lr;
}
.wrap_inner{
    width: 100%;
    display: inline-block;
    writing-mode: horizontal-tb;
    text-align: center;
}

/* .size{
    width: 100px;
    height: 100px;
} */

.box {
    display: inline-block;
    margin: auto;
}

参考:juejin.cn/post/684490…