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%); }
在JSFiddle中查看示例
转换属性需要旧浏览器支持的前缀。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%;。查看此小提琴以获取更多信息。