1 水平居中

内联元素水平居中

.center-inline {
  text-align: center;
}

块级元素水平居中

.center-block {
  margin: 0 auto;
}

多块级元素水平居中

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

弹性盒子模型 flex

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

justify-content 用于设置弹性盒子元素在主轴(横轴)方向上的对齐方式

2 垂直居中

2.1 单行内联(inline)元素垂直居中

span {
  height: 120px;
  line-height: 120px;
}

2.2 多行元素垂直居中

表格布局(table)

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

flex 布局(flex)

.center-flex {
  display: flex;
  flex-direction: column;
  justify-content: center;
}

flex-direction: column 定义主轴方向为纵向。

“精灵元素”

即在父容器内放一个 100%高度的伪元素,让文本和伪元素垂直对齐,从而达到垂直居中的目的。

.ghost-center {
  position: relative;
}
.ghost-center::before {
  content: ' ';
  display: inline-block;
  height: 100%;
  width: 1%;
  vertical-align: middle;
}
.ghost-center p {
  display: inline-block;
  vertical-align: middle;
  width: 20rem;
}

2.3 块级元素垂直居中

固定高度的块级元素

.parent {
  position: relative;
}
.child {
  position: absolute;
  top: 50%;
  height: 100px;
  margin-top: -50px;
}

未知高度的块级元素

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

3 水平垂直居中

固定宽高元素水平垂直居中

.parent {
  position: relative;
}
.child {
  width: 300px;
  height: 100px;
  padding: 20px;
  position: absolute;
  top: 50%;
  left: 50%;
  margin: -70px 0 0 -170px;
}

未知宽高元素水平垂直居中

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

flex 布局

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

justify-content 用于设置或检索弹性盒子元素在主轴(横轴)方向上的对齐方式;而 align-items 属性定义 flex 子项在 flex 容器的当前行的侧轴(纵轴)方向上的对齐方式。

grid 布局

.parent {
  height: 140px;
  display: grid;
}
.child {
  margin: auto;
}