z-index不生效的主因是父容器创建了stacking context,使子元素z-index仅在局部生效;opacity、transform等属性会触发该context,需用开发者工具检查并调整层级策略。z-index 不生效?先确认元素是否创建了 stacking context很多情况下 z-index 看似写了却没用,根本原因不是写错了值,而是父容器悄悄创建了新的 stacking context,把子元素"锁"在局部层级里。比如 opacity: 0.99、transform: translateZ(0)、will-change: transform、filter: blur(1px) 这些属性都会触发新 stacking context ------ 它们本身不显眼,但会让子元素的 z-index 只在该容器内比较,不再和页面其他元素竞争。实操建议:用浏览器开发者工具的「Layers」面板(Chrome)或「3D View」(Firefox)直观查看 stacking context 的嵌套结构检查目标元素所有祖先节点的 computed styles,重点搜 opacity、transform、filter、isolation、position: fixed/sticky若需全局层级控制,尽量避免在中间容器上加触发 stacking context 的属性;必须加时,把 z-index 提到该容器本身,而非它的子元素relative/absolute/fixed 元素的 z-index 是怎么比的?z-index 只对定位元素(position 为 relative、absolute、fixed 或 sticky)有效。但它们的层级不是简单按数字大小排,而是先按 stacking context 分组,再在组内比 z-index 值。常见错误现象:两个 position: absolute 元素,一个 z-index: 100,另一个 z-index: 1,但后者反而盖在上面 ------ 很可能前者父容器是普通 div(无 stacking context),后者父容器有 opacity: 0.99(创建了新 stacking context),而这个容器本身的 z-index 是 10,高于前者所在 context 的默认层(0)。立即学习"前端免费学习笔记(深入)";实操建议:不要只看子元素的 z-index,要查它所属的 stacking context 根节点的 z-index同级定位元素之间才直接比 z-index;跨 context 时,比的是 context 根的层叠顺序z-index: auto 和 z-index: 0 效果不同:auto 不创建 stacking context,0 会(只要元素已定位)modal 遮罩层被 iframe 或 video 盖住?这是浏览器历史遗留行为某些嵌入内容(如 <iframe>、<video>、<select>)在旧版浏览器(尤其 IE 和早期 Chrome)中属于"操作系统级窗口",天然处于最高 stacking level,z-index 无法压制。现代浏览器已大幅改善,但仍有边界情况。 标贝科技 标贝科技-专业AI语音服务的人工智能开放平台
相关推荐
Mr.Daozhi3 分钟前
RAG 进阶实战:跑通 Demo 后我连续翻了 6 次车,逐一修复才真正可用(含 Gradio Web 版)安替-AnTi4 分钟前
厚朴 APK 搜索接口分析小程故事多_808 分钟前
Claude Code自定义workflow skills用法大鹏说大话8 分钟前
SQL 排序与分组实战:解决“分组后取最新数据“plainGeekDev23 分钟前
Android运行时面试题:ART和JVM的区别都搞不清,别写精通了山川湖海27 分钟前
AI时代快速学编程语言的陷阱(以Python为例)H Journey31 分钟前
Supervisor 进程管理工具介绍夏贰四1 小时前
数据建模工具如何筑牢数据根基?数据建模工具怎样落实标准体系?春日见1 小时前
5分钟入门强化学习之动态规划算法与实现DeniuHe2 小时前
sklearn 中所有交叉验证数据集划分方式完整总结