编程进阶网 编程进阶网
首页
  • 在线工具
  • JSON工具
  • 文本工具
  • 图片处理
  • 文档转化
  • 代码压缩
  • 加解密
  • 时间日期
  • 网络工具
  • 颜色设计
  • 二维码
  • 开发实用
  • 计算机原理
  • 操作系统
  • 网络协议
  • 数据库原理
  • 面向对象
  • 设计原则
  • 设计模式
  • 系统架构
  • 性能优化
  • 编程原理
  • 方案设计
  • 稳定可靠
  • 工程运维
  • 基础认知
  • 线性结构
  • 树与哈希
  • 工业级实现
  • 算法思想
  • 实战与综合
  • 算法题考核
  • C语言入门
  • C综合案例
  • C专栏博客
  • C标准集库
  • C++入门教程
  • C++综合案例
  • C++专栏博客
  • C++编程技巧
  • Java入门教程
  • Java综合案例
  • Java专栏博客
  • Go入门教程
  • Go综合案例
  • Go专栏博客
  • Go开发技巧
  • JavaScript入门
  • JavaScript高级
  • Android库解读
  • Android专栏
  • iOS ObjC入门
  • iOS Swift入门
  • iOS入门精通
  • Web之Html手册
  • Web之TypeScript
  • Web之Vue高级进阶
  • Linux之QML入门
  • Linux之QT核心库
  • Python教程
  • Shell&Bash教程
  • 工具脚本
  • 自动化脚本
  • 质量保障
  • 产品思考
  • 软实力
  • 开发流程
  • Git应用
  • 技术模版
  • 技术规范
  • Markdown
  • Mermaid
  • 开源协议
  • 关于我
  • 自我精进
  • 职场管理
  • 职场面试
  • 心情杂货
  • 友情链接

杨充

专注编程 · 终身学习者
首页
  • 在线工具
  • JSON工具
  • 文本工具
  • 图片处理
  • 文档转化
  • 代码压缩
  • 加解密
  • 时间日期
  • 网络工具
  • 颜色设计
  • 二维码
  • 开发实用
  • 计算机原理
  • 操作系统
  • 网络协议
  • 数据库原理
  • 面向对象
  • 设计原则
  • 设计模式
  • 系统架构
  • 性能优化
  • 编程原理
  • 方案设计
  • 稳定可靠
  • 工程运维
  • 基础认知
  • 线性结构
  • 树与哈希
  • 工业级实现
  • 算法思想
  • 实战与综合
  • 算法题考核
  • C语言入门
  • C综合案例
  • C专栏博客
  • C标准集库
  • C++入门教程
  • C++综合案例
  • C++专栏博客
  • C++编程技巧
  • Java入门教程
  • Java综合案例
  • Java专栏博客
  • Go入门教程
  • Go综合案例
  • Go专栏博客
  • Go开发技巧
  • JavaScript入门
  • JavaScript高级
  • Android库解读
  • Android专栏
  • iOS ObjC入门
  • iOS Swift入门
  • iOS入门精通
  • Web之Html手册
  • Web之TypeScript
  • Web之Vue高级进阶
  • Linux之QML入门
  • Linux之QT核心库
  • Python教程
  • Shell&Bash教程
  • 工具脚本
  • 自动化脚本
  • 质量保障
  • 产品思考
  • 软实力
  • 开发流程
  • Git应用
  • 技术模版
  • 技术规范
  • Markdown
  • Mermaid
  • 开源协议
  • 关于我
  • 自我精进
  • 职场管理
  • 职场面试
  • 心情杂货
  • 友情链接
  • README
  • Android提升进阶

  • iOS开发和进阶

  • Web开发和进阶

    • README
    • HTML工具手册

    • CSS样式与布局

      • CSS选择器入门
      • CSS盒模型详解
      • Flex弹性布局
      • CSS定位与层级
        • 1. 五种 position
          • 1.1 static(默认)
          • 1.2 relative — 相对定位
          • 1.3 absolute — 绝对定位
          • 1.4 fixed — 固定定位
          • 1.5 sticky — 粘性定位
        • 2. z-index 与层叠上下文
          • 2.1 z-index 基本规则
          • 2.2 层叠上下文的创建
          • 2.3 层叠比较规则
          • 2.4 常见坑
          • 2.5 实战:弹窗蒙层的正确层级
        • 3. containing block(包含块)
        • 4. 速查表
      • CSS动画与过渡
      • 响应式布局实战
      • CSS渲染与优化
    • JavaScript核心

    • TypeScript入门

    • Vue高级进阶

    • Web工程化实践

  • Linux应用开发

  • IoT智能硬件开发

  • Apps
  • Web开发和进阶
  • CSS样式与布局
杨充
2026-06-23
目录

CSS定位与层级

# 04.CSS定位与层级

五种 position 全解(static/relative/absolute/fixed/sticky)、z-index 层叠规则、层叠上下文的创建条件与比较逻辑、containing block 对 absolute 定位的隐性影响。

# 1. 五种 position

.static   { position: static; }    /* 默认:正常文档流 */
.relative { position: relative; }  /* 相对自身偏移,不脱离文档流 */
.absolute { position: absolute; }  /* 相对于最近的定位祖先,脱离文档流 */
.fixed    { position: fixed; }     /* 相对于视口,脱离文档流 */
.sticky   { position: sticky; }    /* 滚动到阈值后固定 */

# 1.1 static(默认)

元素按正常文档流排列,top/right/bottom/left 和 z-index 无效。

# 1.2 relative — 相对定位

.box {
  position: relative;
  top: 10px;     /* 向下偏移 10px */
  left: 20px;    /* 向右偏移 20px */
}

关键特征:

  • 不脱离文档流(原位置仍被占据)
  • 偏移量相对于自身原位置
  • 常作为 absolute 子元素的定位参考(设置 position: relative 而不给偏移量)

# 1.3 absolute — 绝对定位

.child {
  position: absolute;
  top: 0;
  right: 0;
}

关键特征:

  • 脱离文档流(原位置被后续元素占据)
  • 相对于最近的 position ≠ static 的祖先元素定位
  • 若无定位祖先 → 相对于 <body>(首次包含块)
<div class="parent" style="position: relative;">   <!-- 定位参考 -->
  <div class="child" style="position: absolute; top: 0; right: 0;">
    右上角
  </div>
</div>

# 1.4 fixed — 固定定位

.modal-overlay {
  position: fixed;
  top: 0; right: 0; bottom: 0; left: 0;   /* 全屏覆盖 */
  background: rgba(0,0,0,0.5);
}

关键特征:

  • 相对于浏览器视口定位(不随滚动条移动)
  • 例外:若祖先元素有 transform / filter / perspective,则相对于该祖先

# 1.5 sticky — 粘性定位

.header {
  position: sticky;
  top: 0;             /* 滚动到顶部时固定 */
}

.sidebar {
  position: sticky;
  top: 80px;          /* 距顶部 80px 时开始固定 */
}

sticky = relative + fixed 的混合:

  • 未到阈值时:表现为 relative
  • 到达阈值后:表现为 fixed(但限于父容器内)

失效条件:

  • 父容器设置了 overflow: hidden / scroll / auto
  • 父容器高度不足以触发滚动
  • 未指定 top/right/bottom/left 中至少一个

# 2. z-index 与层叠上下文

# 2.1 z-index 基本规则

.box1 { z-index: 10; }
.box2 { z-index: 20; }   /* box2 显示在 box1 上方 */
  • z-index 只对定位元素(position ≠ static)或 flex/grid 子项生效
  • 默认值 auto(相当于 0,但不创建层叠上下文)
  • 相同值 → 按 DOM 顺序,后写的在上

# 2.2 层叠上下文的创建

以下属性会创建新的层叠上下文:

触发方式 常用场景
position: relative/absolute/fixed/sticky + z-index ≠ auto 最传统
opacity < 1 半透明遮罩
transform: none 以外 动画元素
filter 任意值 滤镜效果
will-change: transform / opacity 性能优化
isolation: isolate 专门用来创建层叠上下文

# 2.3 层叠比较规则

同一层叠上下文中,按以下顺序从下到上排列:

  ① 根层叠上下文的 background 和 border
  ② z-index < 0 的定位元素
  ③ 正常文档流中的块级元素
  ④ 正常文档流中的浮动元素
  ⑤ 正常文档流中的行内元素
  ⑥ z-index: 0 / auto 的定位元素
  ⑦ z-index > 0 的定位元素

# 2.4 常见坑

/* 坑 1:子元素的 z-index 不能突破父层叠上下文 */
.parent  { z-index: 1; position: relative; }   /* 创建层叠上下文 */
.child   { z-index: 999; position: absolute; }  /* 这个 999 仅在 parent 内有意义 */

/* 坑 2:opacity < 1 意外创建层叠上下文 */
.fade-box { opacity: 0.99; }   /* z-index 行为发生变化 */

/* 坑 3:transform 同样创建层叠上下文 */
.animated { transform: translateX(0); }  /* fixed 子元素定位失效 */

# 2.5 实战:弹窗蒙层的正确层级

.modal-backdrop {
  position: fixed;
  top: 0; left: 0; right: 0; bottom: 0;
  z-index: 1000;           /* 蒙层在底层 */
  background: rgba(0,0,0,0.5);
}

.modal-content {
  position: fixed;
  top: 50%; left: 50%;
  transform: translate(-50%, -50%);
  z-index: 1001;           /* 弹窗内容在蒙层之上 */
}

# 3. containing block(包含块)

absolute 元素的定位参考不是父元素,而是包含块。包含块的确定规则:

position 包含块
static / relative 最近的块级祖先的 content-box
absolute 最近的 position ≠ static 的祖先的 padding-box
fixed 视口(例外:有 transform 的祖先)
sticky 最近的滚动祖先
/* absolute 定位以 padding-box 为基准,不是 border-box */
.parent {
  position: relative;
  border: 20px solid red;
}
.child {
  position: absolute;
  top: 0; left: 0;      /* 定位在 padding 内侧,不是 border 外侧 */
}

# 4. 速查表

需求 方案
元素不脱离文档流偏移 position: relative
相对父元素定位 父 position: relative + 子 position: absolute
固定于视口 position: fixed
滚动吸顶 position: sticky; top: 0
弹窗层级管理 蒙层 z-index: 1000 + 内容 z-index: 1001
z-index 不生效 检查是否创建了层叠上下文(transform/opacity 等)

下一篇:05.CSS动画与过渡 — transition、@keyframes 动画、GPU 加速法则。

上次更新: 2026/06/24, 10:13:05
Flex弹性布局
CSS动画与过渡

← Flex弹性布局 CSS动画与过渡→

最近更新
01
CSS选择器入门
06-23
02
CSS盒模型详解
06-23
03
CSS动画与过渡
06-23
更多文章>
Theme by Vdoing | Copyright © 2019-2026 杨充 | MIT License | 鄂ICP备2024073355号-1 | 鄂ICP备2024073355号
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式