Pressidian
花园入口
笔记
项目
关于
实验室
GitHub
花园入口
笔记
项目
关于
实验室
GitHub

KNOWLEDGE PATHS

笔记库
当前位置
笔记库/前端/面试/八股/CSS

层叠上下文

3 分钟阅读 · Note

目录树 578 篇

            • 层叠上下文
            • 风格开关实现
            • 响应式布局&移动端优先
            • CSS
            • Flex与Grid布局
            • Position
          • 进阶篇题目列表
          • DOM&浏览器 API
          • HTTP&网络
          • TS
          • Vue
        • 可投递企业
      • 前端技术栈
    • 笔记目录
    • CLAUDE.md
    • Vue 组件与 Render 函数

关联笔记 6

↗风格开关实现同一路径↗响应式布局&移动端优先同一路径↗CSS同一路径↗Flex与Grid布局同一路径↗Position同一路径↗1基础篇共同主题
  • 层叠上下文

层叠上下文

> Last Format Time:6/25/2026 19:48:41

在 CSS 中,层叠上下文(Stacking Context)是 HTML 元素在三维空间(Z轴)上的堆叠管理单元。


核心特性

  • 独立性:每个层叠上下文形成一个独立的堆叠区域,内部元素的层叠顺序仅在该上下文内部进行比较。
  • 父级限制:子元素的 z-index 受其父级层叠上下文的限制。不同层叠上下文之间的 z-index 值无法直接跨级比较。

常见的触发条件

并非所有元素都会创建层叠上下文,以下情况会触发新的层叠上下文:

  1. 根元素:文档的 <html> 元素会自动创建根层叠上下文。
  2. 定位元素 + z-index:position 属性为 relative、absolute、fixed 或 sticky,且 z-index 的值不为 auto 的元素。
  3. CSS3 特定属性:
    • opacity 小于 1(例如 opacity: 0.9)。
    • transform 不为 none(例如 transform: scale(1.2))。
    • filter、backdrop-filter、perspective、clip-path、mask 等属性不为 none。
    • mix-blend-mode 不为 normal。
  4. 其他属性:
    • isolation: isolate(专门用于强制创建独立层叠上下文)。
    • will-change 指定了上述可能触发层叠上下文的属性。
    • Flex/Grid 容器及其子项(当子项 z-index 非 auto 时)。

同一上下文内的层叠顺序

在同一个层叠上下文中,元素的堆叠顺序从低到高依次为:

  1. 层叠上下文的根元素(背景与边框)。
  2. z-index 为负的定位元素。
  3. 普通块级元素(非定位)。
  4. 浮动元素。
  5. 普通内联/行内块元素。
  6. z-index: auto 或 z-index: 0 的定位元素。
  7. z-index 为正的定位元素(数值越大越靠前)。

常见陷阱与解决方案

一个最常见的问题是:即使某个元素的 z-index 设置得非常高(如 9999),它依然可能被另一个层级较低的元素遮挡。这通常是因为该元素嵌套在一个竞争性的层叠上下文中,其 z-index 仅在父级内部生效,无法穿透到外部。

解决思路:将需要置顶的元素(如模态框、弹窗)移动到 HTML 结构中,使其与需要重叠的目标元素处于同一层级,或者直接放置在 <body> 标签下方,从而避免被嵌套在受限的层叠上下文中。

https://www.bilibili.com/video/BV1sKJ56PEyq/?spm_id_from=333.1007.tianma.2-2-5.click&vd_source=47c9acd507be61251cd2bb730416395c ![Pasted image 20260618190128](../../../../_assets/4aab79b-Pasted image 20260618190128.png)

![Pasted image 20260618190137](../../../../_assets/270af9b-Pasted image 20260618190137.png)


z-index 管理

https://www.bilibili.com/video/BV1f9jA6DEeN/?spm_id_from=333.1007.tianma.2-1-4.click&vd_source=47c9acd507be61251cd2bb730416395c

DOM order

对于静态的展示,我们可以直接调整DOM order,而不是去用z-index去管理: ![Pasted image 20260620220014](../../../../_assets/b48e580-Pasted image 20260620220014.png)

isolation

isolation: isolate(专门用于强制创建独立层叠上下文)

全局 z-index token

![Pasted image 20260620220236](../../../../_assets/b520938-Pasted image 20260620220236.png)