使用 CSS 转换
CSS 变换基于元素的大小,因此如果你不知道元素的高度或宽度,可以将它从相对容器的顶部和左侧绝对定位 50%并将其向左和向上平移 50%使其垂直和水平居中。
请记住,使用此技术,元素可能会在非整数像素边界处渲染,使其看起来模糊。请参阅 SO 中的此答案以获取解决方法。
HTML
<div class="container">
<div class="element"></div>
</div>
CSS
.container {
position: relative;
}
.element {
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
}
交叉浏览器的兼容性
transform 属性需要旧版浏览器支持的前缀。Chrome <= 35,Safari <= 8,Opera <= 22,Android Browser <= 4.4.4 和 IE9 需要前缀。IE8 和旧版本不支持 CSS 转换。
以下是上一个示例的常见转换声明:
-webkit-transform: translate(-50%, -50%); /* Chrome, Safari, Opera, Android */
-ms-transform: translate(-50%, -50%); /* IE 9 */
transform: translate(-50%, -50%);
有关更多信息,请参阅 canIuse 。
更多信息
-
元素根据第一个非静态父级(
position: relative,absolute或fixed)定位。在这个小提琴和本文档主题中探索更多内容 。 -
对于仅水平居中,请使用
left: 50%和transform: translateX(-50%)。垂直居中也是如此:以top: 50%和transform: translateY(-50%)为中心。 -
使用这种居中方法的非静态宽度/高度元素可能会导致居中元素出现挤压。这主要发生在包含文本的元素中,可以通过添加:
margin-right: -50%;和margin-bottom: -50%;来修复。查看此小提琴获取更多信息。