【CSS】层叠上下文和z-index

z-index 的作用范围受"层叠上下文(stacking context)"影响。


🔹 1. z-index 的基本作用

  • 控制元素在 同一个层叠上下文(stacking context) 内的堆叠顺序。
  • 值越大,显示层级越靠上。

🔹 2. 什么是层叠上下文(stacking context)

层叠上下文是浏览器渲染时的一个独立空间,z-index 只在同一层叠上下文里比较 。

一个元素可能会创建新的层叠上下文,比如:

  • 根层叠上下文 :HTML 文档的 <html> 元素天然就是一个。

  • 设置了定位 + z-index 的元素:

    • position: relative/absolute/fixed/sticky 且 z-index 值不是 auto。
  • 其他能触发层叠上下文的属性(即使没设置 z-index):

    • opacity < 1
    • transform
    • filter
    • perspective
    • clip-path
    • will-change
    • isolation: isolate

🔹 3. 作用范围

  1. 同一层叠上下文内:

    • z-index 决定了元素堆叠顺序。
  2. 跨层叠上下文时:

    • 不同上下文之间的元素,比较的是上下文容器的层级,而不是容器内部子元素的 z-index。
    • 即:一个子元素 z-index: 9999,也不能盖过外层上下文里 z-index: 10 的兄弟元素。

🔹 4. 举个例子

html 复制代码
<div class="a">
  <div class="b">
    <div class="c">c</div>
  </div>
  <div class="d">d</div>
</div>
css 复制代码
.a {
  position: relative;
  z-index: 1; /* 父容器 A 层级低 */
}

.b {
  position: relative;
  z-index: 9999; /* B 再高也只是 a 内部 */
}

.c {
  position: relative;
  z-index: 99999; /* 在 b 内部最高 */
}

.d {
  position: relative;
  z-index: 2; /* D > A(1),所以 D 在最上面 */
}

👉 结果:

  • .d 会压在 .c 上面,尽管 .c 的 z-index 数字更大。
  • 因为 .c 属于 .a 这个上下文,而 .a 的 z-index = 1,整体比 .d(z-index=2)低。

🔹 5. 总结

  • z-index 只在同一层叠上下文内生效。
  • 新的层叠上下文会"隔离"子元素,子元素的 z-index 不能跨越父容器。
  • 想让元素真正覆盖其他内容,要确保它所在的上下文本身层级更高。
相关推荐
用户2788607285677 分钟前
别把 AI 查询结果只塞进聊天框:SessionView 与业务页面接线
前端
程序员鱼皮8 分钟前
Personal Agent 是什么?为什么大厂都抢着做?连 DeepSeek Bot 都来了。。
前端·后端·ai编程
用户44028182780713 分钟前
一个人 + TRAE,从 0 到 1 交付一个政务志愿服务平台的全链路实战
前端
m0_5873830015 分钟前
碰碰好评卡功能落地全流程实战指南 附核心逻辑与常见问题解决方案
java·前端·数据库·后端·struts·需求分析
子轩学长说16 分钟前
Workbuddy独立文件浏览器新上线,彻底告别WPS和office全家桶~
前端
nyaomaru17 分钟前
如何用 Jev 从 PR 中提取 “Why” 并写入 CHANGELOG?🤔
前端·typescript
Shirley~~17 分钟前
从0搭建一个3D立体场景:光影与交互全解析
前端·3d
Dovis(誓平步青云)18 分钟前
一年1956亿行:智能电表场景下的时序数据存储实践
运维·前端·自动化·音视频·prometheus
兰亭妙微UI设计公司19 分钟前
兰亭妙微分享:高手设计登录页的12种切入点
开发语言·前端·javascript
前端Baymax22 分钟前
静默的 86 小时:全链 402 停摆与零告警的故障复盘
开发语言·前端·javascript