2014-04-30 110 views
0

我試圖垂直對齊一個容器內的div,高度已定義。我遵循http://www.vertical-align.com/的指南,但我遇到了一些問題。相對定位元素的負頂部邊距(垂直對齊)的問題

據該網站,如果我用這個CSS與此代碼:可用here

#containingBlock { 
    height: 200px; 
    position: relative; 
    overflow: hidden; 
    border: 1px solid red; 
} 

#containingBlock > div { 
    position: absolute; 
    top: 50%; 
    border: 1px solid green; 

} 

#containingBlock > div > div { 
    position: relative; 
    top: -50%; 
    border: 1px solid orange; 
} 

<div id="containingBlock"> 
    <div> 
     <div> 
     This should be placed in the middle 
     </div> 
    </div> 
</div> 

小提琴,我應該完全在中間取得一個文本。但這不會發生,因爲top: -50%不起作用。根據Mozilla devtop屬性+%值應該基於父母的身高,在這種情況下,父母的身高與其孩子的身高相同。但「自動包裝高度」似乎沒有考慮到。如果我爲父div指定一個明確的高度(我的意思是,第一個嵌套),一切似乎都可以,但我希望它自動獲取其子的高度!這有什麼問題?

回答

0

如果要定位塊的高度已知,則可以影響帶有負餘量(即已知高度的50%)的正確定位。

如果不知道你可以用CSS影響它變換如下

-webkit-transform:translate(0%, -50%); 

這個垂直移動的對象一半它自己的身高......等等

HTML

<div class="containingBlock one"> 
    <div> 
     This should be placed in the middle 
    </div> 
</div> 

CSS

.containingBlock { 
    height: 200px; 
    position: relative; 
    border: 1px solid red; 
} 

.containingBlock > div { 
    position: absolute; 
    top: 50%; 
    border: 1px solid green; 
    -webkit-transform:translate(0%, -50%); 
} 

JSfiddle

+0

這更感謝確定,但它不適用於傳統瀏覽器(IE 6/7)。正因爲如此,我正在使用上面提到的技術。不過謝謝你! P.S.我其實想理解爲什麼上述技術不起作用,而不是得到我所需要的:-)比方說,我更關心「如何」而不是「目標」! – Bertuz

0

這裏有一個小提琴:http://jsfiddle.net/dC22r/4/

你有一個高度設置爲具有爲中心,然後給它top:50%和帶負margin減去一半的高度的股利。

+0

對,我必須指定一個高度(這種方式不允許使用「動態」高度)。我對嗎? – Bertuz

+0

是的,因爲你必須減去他的一半高度,如果沒有像素指定的高度,你不知道要減掉多少:) – valerio0999

+0

讓我說這個話題:我討厭css垂直定位。 – Bertuz