
- z-index只有在position状态下才会生效
- 当设置了position以后,元素会自动添加一个z-index:auto的属性,因此层叠优先级也会提高
不同的层叠上下文

- A 元素想跟 B 或者 ChildB 元素比较,很高兴,它们属于相同层叠上下文(ChildB)下,根据层叠水平去判断就可以了
- 如果 A 元素想跟 C 或者 ChildA 比较,那就去找它们共同的祖先层叠上下文(ParentB),找到之后,就根据祖先层叠上下文下两个元素所在的局部层叠上下文比较层叠水平(这里就是 ChildA 和 ChildB 去比较)
- 同理,如果 A 想跟 D 一决雌雄,那么就去找祖先层叠上下文(Root),然后去比较 ParentA 和 ParentB 的层叠水平即可

如果我们将例子稍微改下,让 parentA 不再创建新的层叠上下文元素:

最佳实践
- 不犯二准则:对于非浮层元素,避免设置 z-index 值,z-index 值没有任何道理需要超过 2
- 对于浮层元素,可以通过 JS 获取 body 下子元素的最大 z-index 值,然后在此基础上加 1 作为浮层元素的 z-index 值
-
对于非浮层元素,不要过多地去运用 z-index 去调整显示顺序,要灵活地去运用层叠水平和后来居上的准则去让元素获得正确的显示,如果是在要设置 z-index 去调整,不建议非浮层元素 z-index 数值超过 2,对于 DOM 元素,-1, 0, 1, 2 足够让元素有正确的显示顺序。
-
对于浮层元素,往往是第三方组件开发,当你无法确认你的浮层是否会百分百覆盖在 DOM 树上的时候,你可以去动态获取页面 body 元素下所有子元素 z-index 的最大值,在此基础加一作为浮层元素 z-index 值,用于保证该浮层元素能够显示在最上方。