我有3个div(黑到透明,滑块和redBox)设置如下:
<div class="black-to-transparent">
<div class="vertical-line"></div>
</div>
<div class="slider" style="image-size:cover;">
<div id="text">
<p>
Why does this text go behind a div with a lower z-index, I want it above the white line, but it has to stay in the slide.
</p>
</div>
</div>
<div class="redBox" style="height:300px; width:100%; background-color:red;"></div>
CSS:
#text {
color: red;
z-index: 10;
background: transparent;
}
.vertical-line {
position: absolute;
width: 1px;
height: 75px;
bottom: 15px;
left: 50%;
border-left: 1px solid white;
}
.black-to-transparent {
height: 100px;
width: 100%;
background: linear-gradient(to top left, rgba(255, 255, 255, 0) 49.9%, rgba(0, 0, 0, 1) 50.1%);
position: relative;
margin-bottom: -100px;
z-index: 5;
}
black-to-transparent
的z-index高于slider
,但redBox
的z-index高于所有z-index。不知怎的redBox
仍然出现在black-to-transparent
后面。这是因为它是一个div的子节点,其z-index低于上面的div?
我该如何解决这个问题。
链接到jsFiddle:https://jsfiddle.net/AndrewL32/e35xu520/5/
答案 0 :(得分:2)
请参阅the spec:
每个框属于一个堆叠上下文。给定堆叠上下文中的每个定位框具有整数堆栈级别,这是其在z轴上相对于同一堆叠上下文中的其他堆栈级别的位置。
和
堆叠上下文由任何定位元素(包括相对定位元素)生成,其具有计算值&gt; z-index&#39;除了&#39; auto&#39;
由于您已经为2
提供了自己的堆叠上下文,因此您应用于3
的z-index会将其位置设置为 2
。
您需要重新组织标记,以便3
不是2
的后代。
答案 1 :(得分:1)
div3
更高的z-index工作正在重叠div2
,但由于div3
的父div2
位于div1
以下,您可以除非您将div3
放在div1
之上,否则div2
也会div1
重叠{/ 1}}。
tldr: div1
处于某个位置,div3
处于另一个位置。因此,您显然不会看到div3
重叠div1
。
检查以下代码段:
.a1 {z-index:1;background-color: red;height:50px;width:50px;}
.a2 {z-index:0;background-color: green;height:50px;width:50px;}
.a3{z-index:2;background-color: blue;height:50px;width:50px;}
<div class="a1">
</div>
<div class="a2">
<div class ="a3">
</div>
</div>
jsFiddle:https://jsfiddle.net/AndrewL32/e0d8my79/123/
P.S。避免使用数字启动IDs
和CLASSES
,因为这是不好的做法。在数字之前总是一个字母或单词,就像我上面那样。
答案 2 :(得分:0)
只需将position: relative;
添加到#text
div,就像这样:
#text {
color: red;
z-index: 10;
background: transparent;
position: relative;
}
链接到jsFiddle:https://jsfiddle.net/AndrewL32/e35xu520/3/