CSS 居中的几种方式

水平居中

使用inline-block以及text-align实现。

.container{
    text-align: center;
}
.ele{
    display: inline-block;
}

Demo

使用table实现

这种方法可以不定宽居中。

.container{
        
}
.ele{
    display: table;
    margin: 0px auto;
}

Demo

使用margin: 0 auto实现

这种定位方法需要指定witdh。

.container{

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

Demo

使用flex布局实现

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

或者

.container{
    display: flex;
}
.ele{
    margin: 0px auto;
}

Demo

绝对定位

.container{
    position: relative;
}
.ele{
    position: absolute;
    left: 50%;
    margin-left: -50px;
    width: 100px;
    height: 100px;
    background-color: red;
}

或者将元素宽度的一般改成transform: translate(-50%),这样不定宽的时候也可以实现居中,但是兼容性不是足够好。

.container{
    position: relative;
}
.ele{
    position: absolute;
    left: 50%;
    transform: translate(-50%);
    width: 100px;
    height: 100px;
    background-color: red;
}

Demo

垂直居中

使用vertical-align

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

注意要设置height或者line-height。

Demo

或者

.container{
    display:inline-block;
    vertical-align: middle;
}

Demo

绝对定位

.container{
    height: 500px;
    position:relative;
}
.ele{
    position: absolute;
    top: 50%;
    height: 50px;
    margin-top: -25px;
}

当然height的一半也可以用

transform:translate(0,-50%);

来替代。

Demo

使用flex布局实现

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

Demo

水平垂直居中

使用flex布局

利用flex布局的justify-content以及align-items修改弹性盒子纵向以及横向的对其位置,使子元素在纵向以及横向位置都以正中位置对其。

.container{
    display: flex;
    justify-content: center;
    align-items: center;
}

Demo

使用绝对定位

使用绝对定位设置top以及left为50%,然后将宽度以及高度的一半“拉”回来。

.container{
    position: relative;
}
.ele{
    position: absolute;
    top: 50%;
    left: 50%;
    transform: translate(-50%,-50%);
}

Demo

如果宽度高度指定的时候也可以通过设置负的margin来实现。

.container{
    position: relative;
}
.ele{
    position: absolute;
    top: 50%;
    left: 50%;
    height: 100px;
    width: 100px;
    margin-left: -50px;
    margin-top: -50px;
}

利用vertical-align,text-align,inline-block实现

.container{
    display:table-cell;
    vertical-align: middle;
    text-align: center;
}
.ele{
    display: inline-block;
}

Demo

上一篇:(译)React hooks:它不是一种魔法,只是一个数组——使用图表揭秘提案规则


下一篇:Vue.js 依赖收集