【发布时间】:2013-09-09 11:44:11
【问题描述】:
我遇到过这样一种情况,页面上有 2 个或更多固定位置元素,显示一个在另一个之上(也就是说,第二个的顶部与第一个的底部相邻 -没有这些元素的 z-index 堆叠)。在第一个固定位置元素内部,有一个绝对定位元素,它比它的固定父元素高,所以它超出了那个固定父元素的底部。
问题是下一个固定位置元素会显示在绝对定位元素的顶部。我在绝对定位元素上设置了比固定定位元素更高的 z-index 值,但它被完全忽略了。
为了帮助澄清问题,我整理了这个例子:
HTML
<div class="fixed first">
<p>This is a fixed element</p>
<p class="abs">
I should be displayed above both fixed position elements
</p>
</div>
<div class="fixed second">
<p>This is a fixed element</p>
</div>
CSS
.fixed {
font-size: 16px;
background: #eee;
border-bottom: 1px solid #ccc;
position: fixed;
height: 3em;
width: 100%;
z-index: 1;
}
.abs {
position: absolute;
background: #acc;
height: 6em;
top: 0;
left: 25%;
width: 50%;
z-index: 2;
}
.second {
top: 3.0625em;
}
这是 JSFiddle 上的工作示例:
我有点被这件事难住了。有没有人解释为什么会发生这种情况以及解决方法?
【问题讨论】:
-
this has a good explanation on how z-index works,因为您将看到同一级别上具有 z-index 的所有元素将优先于子层 z-index。考虑到这一点,您的上述小提琴按预期工作
-
当然!我忘记了每个定位元素都会创建自己的堆叠上下文。因为示例中的每个固定位置元素都具有相同的 z-index 值,所以源顺序开始起作用。谢谢你的提醒,皮特。
标签: css css-position z-index