css 为什么在相对定位没有显式高度的元素时忽略“top”属性?

pes8fvy9  于 2022-12-01  发布在  其他
关注(0)|答案(2)|浏览(114)

我不是在寻找对中元件问题的不同解决方案;我希望您能解释一下为什么这里介绍的解决方案不起作用。

请考虑以下jsFiddle:

以下是HTML/CSS代码供参考:

HTML格式

<div class='outer'>
    <div class='middle'>
        <div class='inner'>
            Text should be centered
        </div>
    </div>
</div>

CSS

.outer {
    position: absolute;
    left: 200px;
    top: 50px;
    width: 100px;
    height: 100px;
    border: 2px solid #00f;
    border-radius: 10px;
}

.middle {
    position: absolute;
    left: 50%;
    top: 50%;
    line-height: 1em;
}

.inner {
    position: relative;
    left: -50%;
    top: -50%;
    width: 5em;
}

Chrome和Firefox的元素检查器都告诉我middleinner的宽度和高度都是正确的,而且 horizontal 的定位也是正确的,但是由于某些原因,top: -50%规则被忽略了。然而,只有当.middle没有明确的高度时,它才被忽略--如果你添加了一个,它就可以工作了。即使有效高度和已经有的一样。为什么会这样呢?

bzzcjhmw

bzzcjhmw1#

这是在旧的CSS 2规范中指定的行为(强调我的):
<percentage>
偏移量是包含块的宽度(对于"left"或"right")或高度(对于"top"和"bottom")的百分比。对于"top"和"bottom",如果未显式指定包含块的高度(即,它取决于内容高度),则百分比值的解释与"auto"类似。
在当前的CSS2.1规范中,这个限制被删除了,所以我认为这是一个跨浏览器的bug。这里有一个newer bug可以用一些投票来获得更多的关注。

d6kp6zgx

d6kp6zgx2#

对于那些在我之后尝试添加display:grid;的容器的父

<div style="display: grid;">
    <div _ngcontent-serverapp-c11="">
        <video _ngcontent-serverapp-c11="" onloadedmetadata="this.muted=true" autoplay="" loop="" muted="" playsinline="" class="lazy vid-mobi"><source _ngcontent-serverapp-c11="" src="https://cdn3.blablabla.com/gtb/videos/intro_lg.mp4" type="video/mp4"> 
        </video>
    </div>
</div>

对我很有效

相关问题