【发布时间】:2023-03-31 12:20:01
【问题描述】:
我正在尝试调整某些元素的堆叠顺序;这是SSCCE。
鉴于此 HTML sn-p:
<div id="block1">
<div>Lorem ipsum dolor.</div>
<div id="widget">
<div>Widgety goodness!</div>
</div>
</div>
<div id="block2">
<div>Lorem ipsum dolor.</div>
</div>
<div id="block3">
<div>Lorem ipsum dolor.</div>
</div>
我正在尝试在#block2 之上显示#widget;使用以下 CSS,您会发现在不更改节点树中 #widget 的位置的情况下会出现问题。
#block1, #block2, #block3 {
position: relative;
min-height: 50px;
width: 100%;
}
#block1, #block3 {
background-color: #abc;
color: #123;
z-index: 1;
}
#block2 {
background-color: #def;
color: #456;
z-index: 2;
}
#widget {
background-color: #f00;
position: absolute;
z-index: 999;
left: 200px;
top: 40px;
}
正如您在小提琴中看到的,#widget 与#block2 部分重叠;这很有意义,因为父 #block1 在堆叠顺序中的兄弟姐妹中较低。
显而易见的答案是:让#widget 成为#block2 的孩子,但不幸的是,这不是一个解决方案。此外,#blockN 元素不能修改其相对的z-index 值;块 1 和块 3 必须小于 2。(我的意思是计算的值可能不同,但 #block2 总是大于它的兄弟姐妹)。原因是box-shadow分层。
是否有任何合理的方式(阅读:跨浏览器,IE7+)将#widget 从其堆叠上下文中删除,同时保留其位置、坐标位置、尺寸等?
使用fixed 定位可以根据需要将其移除,但它也获得了固定的所有视觉属性(这使得它无法解决)
我认为这可能已经以迂回的方式回答了,但是我没有找到它。另外,道歉;看来我在最初的帖子中可能遗漏了一些无害但关键的细节。我想我现在已经把它们都讲完了。
【问题讨论】:
-
+1 以获得非常清晰的问题描述
-
感谢@AdityaSaxena,不幸的是我认为我不够清楚;编辑澄清。
-
哦..是吗?我以为您想要一个跨浏览器兼容的解决方案,而无需更改#widget 的位置。
-
@AdityaSaxena 是的,但也不改变块的z-indices。 “中间”块的
z-index总是大于它的兄弟。 -
我能问一下为什么
widget是block1的孩子吗?