Z索引不适用于绝对位置


117

我打开控制台(chrome \ firefox)并运行以下行:

$("body").append("<div id=\"popupFrame\" style=\"width:100%;height:100%;background-color:black;opacity:0.5;position:absolute;top:0;left:0;z-index:1;\" />");
$("body").append("<div id=\"popupContent\" style=\"width:200px;height:200px;z-index:1000;background-color:white;\" >dasdasdsadasdasdasdasdasd</div>");

#popupContent应该高于一切,但受#popupFrame不透明度的影响。

内容未包含在#popupFrame中,这使它变得很奇怪。

目标是创建类似Firefox的警报框

Answers:


224

第二个div是position: static(默认值),因此z-index不适用于它。

您需要定位(将位置属性设置为,而不是staticrelative在这种情况下您可能想要的任何东西)要赋予的内容z-index


41

不透明度和静态位置一样会更改z-index的上下文。向不具有透明度的元素添加不透明度,或者从不具有透明度的元素中删除不透明度。您还必须使两个元素都静态定位或指定相对或绝对位置。以下是上下文的一些背景:http : //philipwalton.com/articles/what-no-one-told-you-about-z-index/


哇。根据这篇文章,这包括不透明度,“变换,过滤器,css区域,分页的媒体以及其他可能的内容”。
jchook

39

旧问题,但此答案可能会帮助某人。

如果您试图将容器的内容显示在容器边界之外,请确保容器中没有容器的内容overflow:hidden,否则容器中的任何内容都将被切除。


26

z-index仅适用于已被赋予明确位置的元素。添加position:relative到#popupContent,您应该会很好。


0

使用position: absolute;时我经常遇到这个问题,我position: relative在child元素中使用时遇到了这个问题。无需更改position: absoluterelative,只需添加child元素即可查看以下两个示例:

let toggle = document.getElementById('toggle')

toggle.addEventListener("click", () => {
 toggle.classList.toggle('change');
})
.container {
  width: 60px;
  height: 22px;
  background: #333;
  border-radius: 20px;
  position: relative;
  cursor: pointer;

}

.change .slide {
  transform: translateX(33px);
}

.slide {
  transition: 0.5s;
  width: 20px;
  height: 20px;
  background: #fff;
  border-radius: 20px;
  margin: 2px 2px;
  z-index: 100;
}

.dot {
  width: 10px;
  height: 16px;
  background: red;
  position: absolute;
  top: 4px;
  right: 5px;
  z-index: 1;
}
<div class="container" id="toggle">
  <div class="slide"></div>
  <div class="dot"></div>
</div>

这是使用位置相对固定的方法:

let toggle = document.getElementById('toggle')

toggle.addEventListener("click", () => {
 toggle.classList.toggle('change');
})
.container {
  width: 60px;
  height: 22px;
  background: #333;
  border-radius: 20px;
  position: relative;
  cursor: pointer;

}

.change .slide {
  transform: translateX(33px);
}

.slide {
  transition: 0.5s;
  width: 20px;
  height: 20px;
  background: #fff;
  border-radius: 20px;
  margin: 2px 2px;
  z-index: 100;
  
  // Just add position relative;
  position: relative;
}

.dot {
  width: 10px;
  height: 16px;
  background: red;
  position: absolute;
  top: 4px;
  right: 5px;
  z-index: 1;
}
<div class="container" id="toggle">
  <div class="slide"></div>
  <div class="dot"></div>
</div>

沙盒在这里

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.