問題描述

我試圖在粉紅色的中間放置藍色的容器,但是在這種情況下,vertical-align: middle; 似乎沒有做到這一點。

<div style="display: block; position: absolute; left: 50px; top: 50px;">
    <div style="text-align: left; position: absolute;height: 56px;vertical-align: middle;background-color: pink;">
        <div style="background-color: lightblue;">test</div>
    </div>
</div>

結果:

期望:

請建議如何實現。

Jsfiddle

最佳解決方法

首先注意 vertical-align 僅適用於表格單元格和 inline-level 元素。

有幾種方法來實現可能滿足或可能不符合您需求的垂直排列。不過我會從我的最愛中顯示 two methods

1. 使用 transformtop



.valign {
    position: relative;
    top: 50%;
    transform: translateY(-50%);
    /* vendor prefixes omitted due to brevity */
}
<div style="position: absolute; left: 50px; top: 50px;">
	<div style="text-align: left; position: absolute;height: 56px;background-color: pink;">
		<div class="valign" style="background-color: lightblue;">test</div>
	</div>
</div>

關鍵是 top 的百分比值相對於包含塊的 height; 雖然 transform 的百分比值相對於框本身的大小 (邊界框) 。

如果您遇到 font rendering issues(模糊字體),修復是將 perspective(1px)添加到 transform 聲明中,以使其成為:

transform: perspective(1px) translateY(-50%);

值得注意的是,CSS transform is supported in IE9+

2. 使用 inline-block(偽) 元素

在這種方法中,我們有兩個兄弟 inline-block 元素,它們在 vertical-align: middle 聲明的中間垂直排列。

其中一個有一個 height100% 的父母,另一個是我們想要的元素,我們想在中間對齊。



.parent {
    text-align: left;
    position: absolute;
    height: 56px;
    background-color: pink;
    white-space: nowrap;
    font-size: 0; /* remove the gap between inline level elements */
}

.dummy-child { height: 100%; }

.valign {
    font-size: 16px; /* re-set the font-size */
}

.dummy-child, .valign {
    display: inline-block;
    vertical-align: middle;
}
<div style="position: absolute; left: 50px; top: 50px;">
	<div class="parent">
        <div class="dummy-child"></div>
		<div class="valign" style="background-color: lightblue;">test</div>
	</div>
</div>

最後,我們應該使用一個 available methods to remove the gap between inline-level elements

次佳解決方法

使用 flex blox 在您的 absoutely 定位的 div 中心其內容。

參見實例 https://plnkr.co/edit/wJIX2NpbNhO34X68ZyoY?p=preview

.some-absolute-div {    
  display: -webkit-box;
  display: -webkit-flex;
  display: -moz-box;
  display: -moz-flex;
  display: -ms-flexbox;
  display: flex;

  -webkit-box-pack: center;
  -ms-flex-pack: center;
  -webkit-justify-content: center;
  -moz-justify-content: center;
  justify-content: center;

  -webkit-box-align: center;
  -ms-flex-align: center;
  -webkit-align-items: center;
  -moz-align-items: center;
  align-items: center;
}

第三種解決方法

用這個 :

.Absolute-Center {
    margin: auto;
    position: absolute;
    top: 0; left: 0; bottom: 0; right: 0;
}

請參考此鏈接:https://www.smashingmagazine.com/2013/08/absolute-horizontal-vertical-centering-css/

參考文獻

注:本文內容整合自 Google/Baidu/Bing 輔助翻譯的英文資料結果。如果您對結果不滿意,可以加入我們改善翻譯效果:薇曉朵技術論壇