2014-04-30 66 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