z-index生效的前提是元素必须为定位元素(position不为static);其数值仅在同一层叠上下文中可比;父元素触发新层叠上下文会限制子元素层级范围;同级元素按DOM顺序或显式z-index决定堆叠顺序。
z-index 要起作用,前提是元素必须是定位元素——也就是说,position 不能是 static(默认值)。只要设了 relative、absolute、fixed 或 sticky,z-index 才能真正控制前后顺序。
没加定位,写再多 z-index 都无效。常见误区就是给一个普通 div 直接写 z-index: 999,但 position 还是默认的 static,结果完全没反应。
position: relative 最安全:不脱离文档流,适合微调或作为子绝父相的父容器position: absolute 适合脱离流的精确定位,但必须确保有已定位的父级作参考position: fixed 对应视口固定,常用于导航栏、返回顶部按钮等position: relative,不改布局还能解锁控制权数值只在**同一层叠上下文内**才有可比性。两个元素即使 z-index 差 1000,如果分属不同上下文,高值也可能被低值“压制”。
z-index: 0 或 1
10–50 比较合理100–1000,避免和第三方组件冲突9999 这类魔法数字,后期维护容易踩坑一旦父元素触发了新的层叠上下文,它的所有子元
素就只能在这个“小世界”里比高低,再高的 z-index 也冲不出去。
opacity: 0.99,那它内部 z-index=999 的弹窗,依然可能被外部 z-index=2 的导航栏盖住当多个定位元素 z-index 相同,或者都没设 z-index(即 auto),浏览器按 DOM 顺序决定谁在上——后写的覆盖先写的。
z-index: 0 和 z-index: 1
-1)会让元素沉到普通流内容下方,适合做底层蒙版或背景装饰