flex 布局居中

主流方式,广泛用于pc端和移动端

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

grid 布局居中

非主流,未来可能取代flex的用法,兼容性待提高

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

display: table-cell

传统中较新的方法

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

绝对定位

适用于使用绝对定位的场景,传统方法

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

transform: translate 可以改为负 margin。

.container {
    position: relative;
}
.child {
    position: absolute;
    top: 50%;
    left: 50%;
    margin-left: -50px; /*.child 宽度的一般,假设 .child 宽度为100px*/
    margin-top: -50px; /*.child 高度的一般,假设 .child 高度为100px*/
}
.container {
    position:relative;
}
.child {
    position:absolute;
    left:0; 
    right:0; 
    top:0; 
    bottom:0;
    margin:auto;
}

奇葩方法

利用 vertical-align 的特性实现垂直居中

.container {
    width: 200px;
    height: 200px;
    border: 1px solid red;
}

.container::before {
    content: '';
    display: inline-block;
    width: 0;
    height: 100%;
    vertical-align: middle;
}

vertical-align 只对行级元素和 table-cell 生效

简单方法

.container {
    padding: 10px 40px;
}

单行文本固定高度垂直居中

.header {
    line-height: 50px;
}

水平居中

块级元素,设置固定宽度,左右 margin 等于 auto

div {
    width: 600px;
    margin: 0 auto;
}

行级元素居中

对块级的父级使用,能让内部的匿名行盒(文字)、行内元素(span)、inline-block 元素在父亲里水平居中

.container {
    text-align: center;
}