我知道这个问题很旧,但是我发现对我而言,完美的解决方法是。
我将此CSS添加到要居中的div中:
div:before {
content: "";
display: inline-block;
height: 100%;
vertical-align: middle;
}
每次都可以使用,而且很干净。
编辑:出于完成的缘故,我使用scss,并且我有一个方便的mixin,我将其包含在我希望垂直居中的直接孩子的每个父母中:
@mixin vertical-align($align: middle) {
&:before {
content: "";
display: inline-block;
height: 100%;
vertical-align: $align;
// you can add font-size 0 here and restore in the children to prevent
// the inline-block white-space to mess the width of your elements
font-size: 0;
}
& > * {
vertical-align: $align;
// although you need to know the font-size, because "inherit" is 0
font-size: 14px;
}
}
完整说明:
div:before
将在div内但在其任何子级之前添加一个元素。当使用:before
或:after
必须使用content:
声明时,否则什么也不会发生,但是出于我们的目的,内容可以为空。然后,我们告诉该元素与父元素一样高,只要定义了其父元素的高度并且该元素至少是inline-block。vertical-align
定义与父母相关的自我的垂直位置,与之相反text-align
。
该@mixin
声明适用于sass用户,它的用法如下:
div {
@include vertical-align(middle)
}