手写 z-index: 999 是高危操作,因其导致数值无语义、易冲突、难维护;必须用 sass 命名变量(如 $z-modal-overlay: 1000)、严格递增留间隙、按职责分区,并通过 @use 正确引入和调用,配合 css 自定义属性桥接 js 动态调整。

为什么手写 z-index: 999 是高危操作
它不是快,是埋雷。常见错误现象包括:z-index: 1000 在 A 组件生效、B 组件失效,只因父容器触发了不同 stacking context;全局 grep 找“下一个可用值”时漏掉一处 z-index: 1001,上线后弹窗被遮;删组件时不敢动它的 z-index,怕牵一发而动全身。
根本问题在于:数字无语义、无校验、无顺序约束。1200 是 toast 还是 modal 遮罩?没人能靠数字猜出来;拼错 $z-moda 不报错,但编译后输出原样 z-index: $z-moda,样式直接失效。
怎么定义真正可读、可扩展的 $z- 变量
核心是显式声明意图,而不是靠魔法数字或数组索引。必须满足三件事:
-
$z-modal-overlay: 1000,而非$z-1000——IDE 悬停可跳转,拼错在 Sass 编译阶段就报错,进不了构建流程 - 所有值严格递增且留间隙:
$z-dropdown: 900、$z-modal-overlay: 1000、中间空出 99 的余量,方便后续插入$z-combo-box: 950 - 按职责分区,不跨区越界:
$z-background: -10(压底图)、$z-toast: 990(浮层)、$z-modal-content: 1010(强弹窗内容)
禁用 $z-max 或 $z-9999 类别名——它违背语义,且大概率与 Headless UI、Bootstrap 等库的默认值冲突。
如果你了解HTML,CSS和JavaScript,您已经拥有所需的工具开发Android应用程序。本动手本书展示了如何使用这些开源web标准设计和建造,可适应任何Android设备的应用程序 - 无需使用Java。您将学习如何创建一个在您选择的平台的Android友好的网络应用程序,然后转换与自由PhoneGap框架到一个原生的Android应用程序。了解为什么设备无关的移动应用是未来的潮流,并开始构建应用程序,提供更
变量写了却没生效,90% 是作用域断链
不是语法错,而是没连上。典型表现是编译后 CSS 里还写着 z-index: $z-modal,说明变量根本没解析。
- 忘了
@use "src/styles/z-index" as z,导致变量未注入;调用时必须写z-index: z.$z-modal-overlay,漏掉z.前缀就无效 - 组件文件里写了
z-index: z.$z-modal-overlay,但该文件根本没@use变量模块 - 混用 Sass 变量和 CSS 自定义属性:同一组件里既写
z-index: $z-modal,又写z-index: var(--z-modal),造成维护断层
检查方法很简单:打开编译后的 CSS 文件,搜 z-index: 后面是不是真实数字。如果不是,立刻回头查 @use 路径和命名空间。
JS 动态提层时必须桥接 CSS 自定义属性
Sass 变量编译后就没了,JS 读不到 $z-modal。如果 Modal 需 hover 上浮、主题切换降级层级,就得靠 CSS 变量桥接:
- 在
_variables.scss中定义后,加一句::root { --z-modal: #{$z-modal-overlay}; } - CSS 中写
z-index: var(--z-modal),而非直接引用 Sass 变量 - JS 中用
el.style.setProperty('--z-modal', '1050')动态调整,确保与样式层一致
别把所有变量塞进 :root——更稳妥的是按模块就近定义,比如 .dropdown { --z-dropdown: 900; },避免跨模块意外联动。真正难的从来不是数值大小,而是搞清当前元素到底在哪个 stacking context 里。调试时先看「Computed」面板里 z-index 是否显示为灰掉或 auto,再往上查父级是否静默触发了新层叠上下文。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!










