前端进阶之旅前端进阶之旅
基础篇
进阶篇
高频篇
精选篇
手写篇
面经篇
AI 篇
原理篇
每日一题
小程序题库
知识卡片
  • 场景篇按分类整理的大前端场景考点
  • 历年面经按年份追踪真实考点
  • 算法题库NEW在线编码即时判题
  • 专项自测100 题快速查漏
  • 前端基础
    • HTTP从报文一路讲到 HTTPS
    • 浏览器渲染、事件循环、进程
    • 计算机基础Linux、网络、操作系统
  • 进阶专项
    • 设计模式23 种模式怎么用
    • 前端系统进阶学习大型项目工程化
    • 前端综合文章长期沉淀的实践文
  • 工程与工具
    • Node学习指南从环境搭建到服务端
    • NPM工作流script、依赖与发布
    • Docker容器化部署上手
    • Canvas图形与动画实战
  • 路线与导图
    • 思维导图知识点全景图
    • 学习路线按图索骥不跑偏
  • 动态
    • 公众号动态公众号历史文章
    • 博客动态站长的技术博客
    • 开发者导航常用工具与文档站
  • AI 助手随时提问,即时解析
  • AI 模拟面试模拟真实面试 + 报告
  • AI 知识地图串起全站知识点
  • AI 定制路线按你的简历现排
AI 热点
旧版
基础篇
进阶篇
高频篇
精选篇
手写篇
面经篇
AI 篇
原理篇
每日一题
小程序题库
知识卡片
  • 场景篇按分类整理的大前端场景考点
  • 历年面经按年份追踪真实考点
  • 算法题库NEW在线编码即时判题
  • 专项自测100 题快速查漏
  • 前端基础
    • HTTP从报文一路讲到 HTTPS
    • 浏览器渲染、事件循环、进程
    • 计算机基础Linux、网络、操作系统
  • 进阶专项
    • 设计模式23 种模式怎么用
    • 前端系统进阶学习大型项目工程化
    • 前端综合文章长期沉淀的实践文
  • 工程与工具
    • Node学习指南从环境搭建到服务端
    • NPM工作流script、依赖与发布
    • Docker容器化部署上手
    • Canvas图形与动画实战
  • 路线与导图
    • 思维导图知识点全景图
    • 学习路线按图索骥不跑偏
  • 动态
    • 公众号动态公众号历史文章
    • 博客动态站长的技术博客
    • 开发者导航常用工具与文档站
  • AI 助手随时提问,即时解析
  • AI 模拟面试模拟真实面试 + 报告
  • AI 知识地图串起全站知识点
  • AI 定制路线按你的简历现排
AI 热点
旧版
首页程序员面试题库负 z-index 层叠顺序 背景
CSS盒模型与排版

给元素设了 z-index 为负数,它会跑到父元素背景后面吗?

负 z-index 的元素会排在它所属层叠上下文的背景和边框之上,排在所有普通流内容之下。它会不会跑到父元素背景后面,取决于父元素自己是不是层叠上下文:不是的话,它会一路沉到更外层,被父元素的背景盖住。

前端进阶之旅 · 一题精讲更新于 2026.09.29
CSS#盒模型与排版
先看核心答案读代码示例
理解线索

一个层叠上下文里从下往上的前三层

  1. 上下文根的背景创建层叠上下文那个元素自己的背景和边框,永远在最底
  2. 负 z-index 层定位且 z-index 为负的后代,数值越小越靠下
  3. 普通流内容非定位的块级盒、浮动、行内文字,都压在负 z-index 之上

负 z-index 元素会被同一上下文里所有普通流内容盖住,包括它的兄弟元素。所以它常被兄弟元素挡住点击,看起来像「点不动了」。

核心回答

先记住这个答案

负 z-index 的定位元素,画在它所属层叠上下文根元素的背景和边框之上,画在同一上下文里所有普通流内容之下。关键在于「所属」:如果父元素没有创建层叠上下文,子元素属于更外层的上下文,比如根元素 html,那它就会排到父元素背景的后面,看起来像消失了。想让它留在父元素背景之上、文字之下,给父元素加 isolation: isolate 或者 position: relative; z-index: 0。

  • 负层级仍受父级层叠上下文约束
  • 父元素不是层叠上下文,子元素会沉到父元素背景后面
  • isolation: isolate 可隔离负层级
  • 负 z-index 必须配合定位才生效

装饰背景的标准写法

最常见的场景是用 ::before 给按钮或卡片做一层渐变、倾斜的背景,要求它在文字下面。

用伪元素做一层底图CSS
.button {
  position: relative;
  isolation: isolate;      /* 关键:自己创建层叠上下文 */
  background: #fff;
}

.button::before {
  content: '';
  position: absolute;
  inset: 0;
  z-index: -1;             /* 在按钮背景之上、按钮文字之下 */
  background: linear-gradient(90deg, #6366f1, #ec4899);
  transform: skewX(-12deg);
}

去掉 isolation: isolate 再看,渐变层会整个消失。因为 .button 此时只是一个 z-index: auto 的定位元素,不创建层叠上下文,::before 的 -1 是拿到外层上下文里去比的,它被排到了外层上下文的负值层。而 .button 自己是定位元素,它的白色背景画在外层上下文靠上的定位层里,正好把渐变层整个盖住。 加上 isolation: isolate 以后,.button 自己成了层叠上下文的根,-1 只在按钮内部生效,排在按钮白底之上、按钮文字之下。

负 z-index 在层叠顺序里的位置

一个层叠上下文内部,浏览器从下往上依次画:根元素的背景和边框,负 z-index 的后代,普通流里的块级盒,浮动盒,行内内容,z-index 为 auto 或 0 的定位元素,最后是正 z-index 的后代。

负 z-index 排在第二层,这意味着它只比上下文根的背景高,比其他所有东西都低。同一个上下文里有多个负值时,-2 在 -1 下面;数值相同就按文档顺序,后面的盖前面的。

为什么根元素背景永远压不住
层叠上下文的根元素是把整个上下文当作一张画布来画的,先画它自己的背景,再在上面画后代。所以后代的 z-index 再小,也不可能跑到根元素背景下面。这就是「父元素创建了层叠上下文,子元素负 z-index 就不会跑到父元素后面」的原因。
回答前,多想一步

容易答错的地方

以为负 z-index 就是全页面最底层
它只是所在层叠上下文的底层。一个弹窗内部的元素设 z-index: -9999,也只会沉到弹窗背景之上,不会跑出弹窗去。
没加定位就写负 z-index
普通的静态元素设置 z-index 不起作用。至少要 position: relative,或者是 flex、grid 容器的子项,z-index 才会被采用。
忘了它可能接不到点击
负 z-index 元素被同一上下文里的普通流兄弟盖住以后,鼠标事件会落在上面那层。用它做可点击的背景图、背景视频按钮时,经常出现点了没反应,其实是被别的块挡住了。
试着用自己的话回答

面试官还会怎么问?

isolation: isolate 和 z-index: 0 有什么区别?

两者都能创建层叠上下文。z-index: 0 需要元素本身是定位元素或 flex、grid 子项,而且会让元素参与外层上下文里 z-index: 0 那一层的排序,可能改变它和兄弟元素的覆盖关系。isolation: isolate 不要求定位,也不用碰 z-index,只起「封口」作用。对本来就是定位元素、z-index 为 auto 的按钮来说,加上它以后在外层的覆盖关系不变,副作用最小。

哪些属性会让父元素意外变成层叠上下文?

除了定位加数值 z-index,还有 opacity 小于 1、transform、filter 不为 none、position: fixed 或 sticky、will-change 指定了这些属性、contain: paint 等。项目里负 z-index 突然「又能显示了」或者「又消失了」,通常是父元素加减了其中一个属性。

为什么不直接给文字一个更高的 z-index,而要用负值?

文字是普通流内容,要给它 z-index 就得包一层再定位,结构更复杂。装饰层只有一个,把它压下去比把所有内容抬起来省事,也不影响按钮内部其他元素原有的层级。

从一道题,走向一组知识

把知识连起来

盒模型与排版

给一个块加上 overflow: auto,除了出滚动条还会带来哪些副作用?

用负 z-index 做的装饰层常被父元素的 overflow 裁掉,那一题讲了 overflow 的裁剪范围。

盒模型与排版

overflow: clip 和 overflow: hidden 看起来一样,到底差在哪?

负 z-index 装饰层被父盒裁掉时,overflow: clip 与 hidden 都会裁剪,但后者仍可由脚本滚动。

参考资料

  • CSS:盒模型与排版参考资料

示例用于理解所注明的运行环境与边界;延伸学习可结合原文中的更多案例。

本题目录
  1. 先记住这个答案
  2. 装饰背景的标准写法
  3. 负 z-index 在层叠顺序里的位置
  4. 容易答错的地方
  5. 面试官还会怎么问
  6. 把知识连起来
读懂,再试着讲出来

先看核心答案,再读代码。最后展开追问,检查自己有没有遗漏边界。

试着回答追问
浏览全部面试题理解原理,也关注真实的使用场景。回到顶部 ↑