Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/css/34.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Css 相对定位图元的负上边距问题(垂直对齐)_Css_Vertical Alignment - Fatal编程技术网

Css 相对定位图元的负上边距问题(垂直对齐)

Css 相对定位图元的负上边距问题(垂直对齐),css,vertical-alignment,Css,Vertical Alignment,我试图将容器内的div垂直对齐,并定义高度。我遵循的指导,但我面临一些问题 根据网站,如果我将此css用于此代码: #containingBlock { height: 200px; position: relative; overflow: hidden; border: 1px solid red; } #containingBlock > div { position: absolute; top: 50%; border:

我试图将容器内的div垂直对齐,并定义高度。我遵循的指导,但我面临一些问题

根据网站,如果我将此css用于此代码:

#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>
可用小提琴


我应该在中间找到一篇完整的课文。但这并没有发生,因为排名靠前的-50%不起作用。根据top属性,+%的值应基于父级的高度,在这种情况下,父级的高度自动与其子级的高度相同。但似乎没有考虑自动包裹高度。如果我为父div指定一个显式的高度,我的意思是,第一个嵌套的,一切似乎都正常,但我希望它自动获取其子div的高度!这有什么问题?

如果要定位的块的高度已知,则可以使用负边距(即已知高度的50%)影响正确定位

如果不知道,您可以使用CSS转换来影响它,如下所示

-webkit-transform:translate(0%, -50%);
这会将对象垂直移动到其自身高度的一半…依此类推

HTML

这是一把小提琴:


你必须为div设置一个必须居中的高度,然后给它一个顶部:50%,然后用负边距减去他的一半高度。

这更合适,但它不适用于传统浏览器IE 6/7。正因为如此,我才使用了上面提到的技术。不过还是要谢谢你!顺便说一句,我真的很想理解为什么上述技术不起作用,而不是得到我需要的东西:-让我说我更感兴趣的是如何而不是目标!对,我一定要指定一个高度动态高度是不允许用这种方式的。我说的对吗?是的,因为你必须减去他的一半高度,如果没有指定的像素高度,你就不知道要减去多少:让我说这个话题:我讨厌css垂直定位。这是另一个解决方案:但它不漂亮,这真的取决于你需要什么。这是基于线的高度
<div class="containingBlock one">
    <div>
        This should be placed in the middle
    </div>
</div>
.containingBlock {
    height: 200px;
    position: relative;
    border: 1px solid red;
}

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