【发布时间】:2020-06-18 18:20:30
【问题描述】:
请看这个非常简单的 sn-p 来说明我的问题:
#container {
position: relative;
padding: 20px;
border: 2px solid gray;
}
#back {
position: absolute;
top: 0;
bottom: 50%;
left: 0;
right: 0;
background-color: #bbb;
}
<div class="col-sm-12" id="container">
<div id="back"></div>
<h1>Some Text</h1>
</div>
h1 标记位于 HTML 代码中的back 元素之后。
由于我没有更改它的position 属性,所以它必须是static。
而且,据我所知,static 元素是根据页面的流向定位的。
那么……为什么绝对定位的div如上所示它的兄弟h1?
我期待在h1 后面看到它,因为它排在第一位。
请注意,我知道如何纠正这种行为,我只是在问为什么!
更正的片段:
#container {
position: relative;
padding: 20px;
border: 2px solid gray;
}
#back {
position: absolute;
top: 0;
bottom: 50%;
left: 0;
right: 0;
background-color: #bbb;
}
/* Adding the below corrects this behaviour */
h1 {
position: relative;
}
<div class="col-sm-12" id="container">
<div id="back"></div>
<h1>Some Text</h1>
</div>
...为什么在h1 上使用position: relative 可以纠正这种行为?
【问题讨论】:
-
当你绝对定位一个元素时,你将它从 DOM 流中移除。有一个有用的explanation here
-
@Lewis 这是否意味着在我的第二个 sn-p 中使用
position: relative也会从流程中删除h1? -
没有。我不是 100% 确定机制,但我认为当你添加
position:relative到一个元素时,它获得了沿着 z-index 移动的能力(尝试 z-indexing 一个没有位置的元素,它会做没有什么)。它使用默认值:auto建立。在这个 SO 问题here 中有更多好的信息(具体看昆汀的回答)。 -
@Lewis 不,我正在谈论考虑所有元素的逻辑绘画顺序(如我的回答中所述),z-index 与这里无关......默认情况下它不会为 0但它是
auto(可能相同但不完全相同) -
@Lewis 仔细阅读第 8 步,您将看到 z-index 中 auto 和 0 之间的区别。 0 将创建一个堆叠上下文,但 auto 不会,这里有很大的不同;)
标签: html css css-position