在决定HTML中元素的堆叠顺序时,z-index
和opacity
如何相关?
当我将opacity
小于1
的元素z-index
说999
时。该元素位于没有z-index
的元素后面。
$(function() {
$("#checkbox1").on("change", function() {
$("#green-parent").toggleClass("add-opacity", this.checked);
});
});

.green,
.blue {
position: absolute;
width: 100px;
line-height: 100px;
text-align: center;
color: white;
}
.green {
z-index: 999999999;
top: 50px;
left: 50px;
background: green;
}
.blue {
top: 60px;
left: 90px;
background: blue;
}
.add-opacity {
opacity: 0.99;
}

<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
<input id="checkbox1" type="checkbox" value="1">
<label for="checkbox1">Add opacity to green box parent</label>
<div id="green-parent">
<span class="green">Green</span>
</div>
<div>
<span class="blue">Blue</span>
</div>
&#13;
答案 0 :(得分:3)
除了opacity
stacking context Alexey Ten在his comment中指出(这是一个因素),z-index
相对于元素的容器。在这种情况下,您的蓝色和绿色元素都包含在没有定义div
的单独z-index
父项中。由于HTML排序,后者div
(带有蓝色框的那个)将出现在前一个(绿色的)之上。
在下面的示例中,我已将类.first
添加到第一个父div
和.second
添加到第二个,然后为它们提供了自己的z-index
属性
.green, .blue {
position: absolute;
width: 100px;
color: white;
line-height: 100px;
text-align: center;
}
.green {
z-index:999999999;
top: 90px;
left: 60px;
background: green;
}
.gp{
opacity:0.99;
}
.blue {
top: 100px;
left: 100px;
background: blue;
}
.first, .second {
position: relative;
}
.first {
z-index: 2;
}
.second {
z-index: 1;
}
<div class="first">
<span class="green">Green</span>
</div>
<div class="second">
<span class="blue">Blue</span>
</div>
答案 1 :(得分:3)
定位元素的z-index值不是&#34; auto&#34;并且不透明度值小于1的元素会生成堆叠上下文。请参阅rules regarding the painting order。
在你的第一个例子中,我们有根堆叠上下文和各种后代,包括:
auto
z-index auto
z-index的蓝框放在后面;带有正z-index的绿色框放在前面(见规则编号8和9)。
在你的第二个例子中,我们有:
这两个要素属于同一类别(见规则第8条)。在这种情况下,HTML顺序确定哪个元素出现在前面。蓝色框出现在源顺序的后面,因此它出现在前面。