【发布时间】:2013-04-29 18:46:16
【问题描述】:
以前,我认为子元素的 z-index 不能超过其父元素的兄弟元素的 z-index 比其父元素高的元素。例如,div A 和 B 是兄弟姐妹。 Div A 的 z-index 为 10,div B 的 z-index 为 5。Div B 有一个子元素:Div C,z-index 为 9999。据我了解,div C 不会位于div A 上方,因为div C 的父级(div B) 的z-index 低于div A。这是正确的,除非div B 的 z-index 为“auto”。当div B 的 z-index 为“auto”时,即“0”,因为它是从 body 继承的,div C 的位置高于 div A,即使 div B 的 z-index 实际上是 LOWER 比它不工作的时候。
根据 CSS2 规范,z-index 'auto' 定义为
生成的box在当前stacking context中的stack level为0,box不会建立新的stacking context,除非它是根元素。
我在理解“stacking context.”时遇到了麻烦。这似乎是定义的 z-index 为 0 和默认为 0 但也有没有堆叠上下文。更具体地说:
为什么没有堆叠内容的元素的子元素的 z 索引与堆叠上下文中的元素的 z 索引不同?
这是一个小提琴,它显示了 z-index 为 0 和 z-index 为 auto 之间的区别。绿色 div 是蓝色 div 的孩子,红色 div 是蓝色 div 的兄弟。
【问题讨论】:
-
一个简短的答案可能是:您需要一个默认的堆叠顺序来处理页面上没有明确设置 z-index 的任何非定位元素。