了解几种实现垂直居中的方法。

table元素自带垂直居中

table自带垂直功能table自带垂直功能
.parent {
  border: 1px solid red;
  padding: 10px;
}
.child {
  border: 1px solid green;
  padding: 10px;
}

示例代码 - table


行内元素垂直居中

单行内联元素

通过设置内联元素的高度(height)等于行高(line-height),从而使元素垂直居中。

单行内联元素垂直居中
div {
  height: 100px;
  border: 1px solid red;
}
span {
  border: 1px solid green;
  line-height: 100px;
}

示例代码 - 单行内联元素


多行内联元素

利用表布局

    内联元素是在表格里面,这时可以利用inline元素的CSS属性vertical-align,默认是baseline属性,将其设置为middle
.parent {
  border: 1px solid red;
  height: 200px;
  display: table;
}
.child {
  display: table-cell;
  vertical-align: middle;
}

示例代码 - 表布局


利用flex布局

利用 flex 布局实现垂直居中,将主轴方向定义为纵向,然后使用 justify-content 将其居中。

由于 flex 布局是 CSS3 中定义,较老的浏览器存在兼容性问题。

块级元素也可使用 flex 布局实现居中。

    利用flex布局实现垂直居中,其中flex-direction: column定义主轴方向为纵向。因为flex布局是CSS3中定义,较老的浏览器存在兼容性问题。
.parent {
  border: 1px solid red;
  height: 200px;
  display: flex;
  flex-direction: column;
  justify-content: center;
}

示例代码 - flex布局


添加伪元素

先给子元素设置为行内块级元素,并设置 vertical-align,然后再给父元素添加 100% 高度的伪元素 before 或 after,让文本和伪元素垂直对齐,从而达到垂直居中的目的。

    给父元素添加100%高度的伪元素before、after,让文本和伪元素垂直对齐,从而达到垂直居中的目的
.parent {
  border: 1px solid red;
  height: 200px;
  text-align: center;
}
.child {
  border: 1px solid blue;
  display: inline-block;
  width: 300px;
  height: 100px;
  vertical-align: middle;
}
.parent::before {
  content: '';
  height: 100%;
  display: inline-block;
  vertical-align: middle;
}

示例代码 - 添加伪元素


块级元素垂直居中

定高

绝对定位 + margin-top

如果我们知道居中元素的高度和宽度,可以通过绝对定位元素距离顶部 50%,并设置 margin-top 向上偏移元素高度的一半,就可以实现垂直居中了。

固定高度的块级元素; 如果我们知道居中元素的高度和宽度, 可以通过绝对定位元素距离顶部50%,并设置margin-top向上偏移元素高度的一半,就可以实现垂直居中了。
.parent {
  border: 1px solid red;
  position: relative;
  height: 300px;
}
.child {
  border: 1px solid red;
  position: absolute;
  height:200px;
  top: 50%;
  margin-top: -100px;
}

示例代码 - margin-top


绝对定位 + margin:auto;

在子元素上设置 position: absolute;、margin: auto;,然后分别给 top、bottom、left、right 都设置为 0 即可。

子元素设置absolute,margin:auto,top、bottom、left、right为0
.parent {
  border: 1px solid red;
  height: 200px;
  position: relative;
}
.child {
  border: 1px solid green;
  position: absolute;
  width: 200px;
  height: 100px;
  margin: auto;
  top: 0;
  bottom: 0;
  left: 0;
  right: 0;
}

示例代码 - margin:auto;


不定高

transform属性

当垂直居中的元素的高度和宽度未知时,我们可以借助 CSS3 中的 transform 属性向 Y 轴反向偏移 50% 的方法实现垂直居中,但是部分浏览器存在兼容性的问题。

未知高度的块级元素;当垂直居中的元素的高度和宽度未知时,我们可以借助CSS3中的transform属性向Y轴反向偏移50%的方法实现垂直居中,但是部分浏览器存在兼容性的问题。
.parent {
  border: 1px solid red;
  position: relative;
  height: 200px;
}
.child {
  border: 1px solid blue;
  position: absolute;
  transform: translateY(-50%);
  top: 50%;
}

示例代码 - transform


使用假表格

将父元素 display 设置为 table-cell,然后利用 vertical-align 实现垂直居中。

利用假表格来实现,在父元素设置vertical-align: middle; display: table-cell;即可
.parent {
  border: 1px solid red;
  width: 250px;
  height: 200px;
  vertical-align: middle;
  display: table-cell;
}
.child {
  border: 1px solid green;
}

示例代码 - 假表格