使用 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%;來修復。檢視此小提琴獲取更多資訊。