为什么z-index不起作用?

Lin*_*e57 168 html css z-index css3

所以,如果我理解z-index正确,在这种情况下它将是完美的:

在此输入图像描述

我想将底部图像(标签/卡片)放在它上面的div下面.所以你看不到锋利的边缘.我该怎么做呢?

z-index:-1 // on the image tag/card
Run Code Online (Sandbox Code Playgroud)

要么

z-index:100 // on the div above
Run Code Online (Sandbox Code Playgroud)

也不起作用.也不是这样的组合.怎么会?

Eve*_*ert 391

z-index属性仅适用于元件具有position比其它值static(例如position: absolute;,position: relative;position: fixed).

position: sticky;Firefox中也支持这种功能,在Safari中加上前缀,在自定义标记下的旧版Chrome中工作了一段时间,Microsoft正在考虑将其添加到Edge浏览器中.

  • [它还取决于其他因素来创建`Stacking Context`.](https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_Positioning/Understanding_z_index/The_stacking_context) (5认同)
  • 所有现代浏览器现在都支持“sticky”:https://caniuse.com/css-sticky (5认同)
  • 除了这个答案外,Chrome和撰写本文时可能使用的其他浏览器都要求您明确声明`position:relative`才能使z-index工作,尽管默认情况下元素以其他相对方式运行 (3认同)
  • 就我而言,这是由于固定元素没有背景颜色,看起来它没有重叠,但实际上是重叠的,但只是与前景色重叠。 (2认同)

Buk*_*ksy 53

如果您将位置设置为其他值而不是static您的元素z-index仍然不起作用,则可能是某个父元素已z-index设置.

堆叠上下文具有层次结构,并且每个堆叠上下文都以父级堆叠上下文的堆叠顺序来考虑.

所以跟随html

div { border: 2px solid #000; width: 100px; height: 30px; margin: 10px; position: relative; background-color: #FFF; }
#el3 { background-color: #F0F; width: 100px; height: 60px; top: -50px; }
Run Code Online (Sandbox Code Playgroud)
<div id="el1" style="z-index: 5"></div>
<div id="el2" style="z-index: 3">
  <div id="el3" style="z-index: 8"></div>
</div>
Run Code Online (Sandbox Code Playgroud)

不管有多大z-indexel3将被设置,它总是会在el1,因为它的父具有较低的堆叠上下文.您可以将堆叠顺序想象为堆叠顺序el3实际为3.8且低于5的级别.

如果要检查父元素的堆叠上下文,可以使用以下命令:

var el = document.getElementById("#yourElement"); // or use $0 in chrome;
do {
    var styles = window.getComputedStyle(el);
    console.log(styles.zIndex, el);
} while(el.parentElement && (el = el.parentElement));
Run Code Online (Sandbox Code Playgroud)

关于在MDN上堆叠上下文有一篇很棒的文章

  • 设置适当的父元素的z-index。 (3认同)
  • 如何解决这个问题? (2认同)
  • 请注意:当您的父元素具有“position:sticky”并且没有 z 索引时,无论您为其子元素设置什么 z 索引,它都将不起作用,您必须为父元素设置一些 z 索引,也许对于所有位置类型都是如此:“粘性、相对、绝对”等,但在我的情况下它是“粘性”。 (2认同)

cle*_*lem 29

您的元素需要具有position属性.(例如绝对,相对,固定)或z-index将不起作用


Mic*_*l_B 20

在许多情况下,必须定位一个元素才能z-index工作.

实际上,应用问题position: relative中的元素可能会解决问题(但是没有提供足够的代码来确定).

其实position: fixed,position: absolute并且position: sticky还将使z-index,但这些值也改变了布局.随着position: relative布局不受干扰.

基本上,只要元素不是position: static(默认设置),它就被认为是定位的并且z-index可以工作.


很多答案"为什么z-index不工作?" 问题断言z-index 适用于定位元素.从CSS3开始,这已不再适用.

作为弹性项目网格项目的元素z-index即使在何时position也可以使用static.

从规格:

4.3.Flex项目Z-Ordering

柔性物品油漆完全一样内嵌块,不同之处在于为了改性文档顺序代替原始文档顺序的使用,并且z-index其它值比auto创建一个堆叠内容即使positionstatic.

5.4.Z轴订购:z-index属性

的网格项目的绘制顺序是完全一样的内联块,不同之处在于为了改性文档顺序代替原始文档顺序的使用,并且z-index比其它值auto创建一个堆叠内容即使 positionstatic.

以下是z-index处理非定位弹性项目的演示:https://jsfiddle.net/m0wddwxs/

  • "即使位置是静态的,作为弹性项目或网格项目的元素也可以使用z-index." 是的,规范实际上是说处理`position:static`与处理flex和网格项的`position:relative`完全相同,因为这些布局方法的动态性质.所以我可能会说,并不是说CSS3中不再需要定位一个元素,而是CSS3将flex和grid项视为定位,无论如何.但是,可能只有两种方式来看同一件事. (3认同)

Abd*_*hed 15

确保您想要使用 z-index 控制的该元素没有具有z-index property 的父元素,因为该元素由于其父元素\xe2\x80\x99s z-index 级别而处于较低的堆叠上下文中。

\n

这是一个例子:

\n
<section class="content">            \n    <div class="modal"></div>\n</section>\n\n<div class="side-tab"></div>\n\n// CSS //\n.content {\n    position: relative;\n    z-index: 1;\n}\n\n.modal {\n    position: fixed;\n    z-index: 100;\n}\n\n.side-tab {\n    position: fixed;\n    z-index: 5;\n}\n
Run Code Online (Sandbox Code Playgroud)\n

在上面的示例中,模态框的 z-index 高于内容,但内容将显示在模态框的顶部,因为“ content ”是具有 z-index 属性的父级。

\n

这里有一篇文章解释了 z-index 可能不起作用的 4 个原因:\n https://coder-coder.com/z-index-isnt-working/

\n


Moh*_*day 13

Z-index 需要这些才能工作:

  1. 位置:相对、绝对、固定、..
  2. 确保父元素没有overflow: hidden;