z-index不使用位置绝对值

Gal*_*Ziv 105 html css

我打开控制台(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>");
Run Code Online (Sandbox Code Playgroud)

#popupContent应该是最重要的,但它受#popupFrame不透明度的影响.

内容不包含在#popupFrame中,这使得这非常奇怪.

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

我会感激任何帮助.

提前致谢.

Que*_*tin 202

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

您需要定位(将位置属性设置为除此之外的任何其他内容static,relative在这种情况下您可能需要)您想要的任何内容z-index.


Rhi*_*rus 37

不透明度会改变z-index的上下文,静态定位也是如此.要么将不透明度添加到没有它的元素,要么将其从元素中删除.您还必须使两个元素静态定位或指定相对或绝对位置.以下是关于背景的一些背景知识:http://philipwalton.com/articles/what-no-one-told-you-about-z-index/

  • 哇。根据这篇文章,这包括不透明度、“转换、过滤器、css 区域、分页媒体,以及其他可能的”。 (2认同)
  • 哇,不知道这个!真的很有帮助。谢谢 (2认同)

ste*_*n35 28

老问题,但这个答案可能有助于某人.

如果您试图在容器边界之外显示容器的内容,请确保它没有overflow:hidden,否则将切断其外部的任何内容.


小智 25

z-index仅适用于已明确定位的元素.添加position:relative到#popupContent,你应该很高兴.


Blo*_*gic 9

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

let toggle = document.getElementById('toggle')

toggle.addEventListener("click", () => {
 toggle.classList.toggle('change');
})
Run Code Online (Sandbox Code Playgroud)
.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;
}
Run Code Online (Sandbox Code Playgroud)
<div class="container" id="toggle">
  <div class="slide"></div>
  <div class="dot"></div>
</div>
Run Code Online (Sandbox Code Playgroud)

这是使用相对位置来修复它的方法:

let toggle = document.getElementById('toggle')

toggle.addEventListener("click", () => {
 toggle.classList.toggle('change');
})
Run Code Online (Sandbox Code Playgroud)
.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;
}
Run Code Online (Sandbox Code Playgroud)
<div class="container" id="toggle">
  <div class="slide"></div>
  <div class="dot"></div>
</div>
Run Code Online (Sandbox Code Playgroud)

沙箱在这里