用途:这是一份 CSS 层叠纪律参考,目标是解决样式冲突,用 @layer 的可预测声明顺序替代不断堆叠选择器优先级的做法,用 @scope 的 DOM 邻近度实现组件级作用域隔离,可用于组织样式表、隔离第三方 CSS、治理 !important 链和组件嵌套覆盖问题。
主要能力与要点:
- @layer 提供语句、块、匿名、嵌套、@import ... layer() 五种语法形式,并可用规范层序:@layer reset, base, theme, components, utilities;,所有作者 CSS 应放入具名层,不留未分层声明。
- 层叠反转规则:普通作者声明中未分层永远胜过分层,分层之间后声明者胜;含 !important 时方向反转,分层胜未分层,且先声明层胜。
- @scope 支持仅根、根+限制(donut)、内联等形式,裸选择器与 & 只计选择器本身特异性(:where(:scope) 前缀不贡献权重),显式 :scope 增加类级权重。
- 层叠邻近度在特异性之后、出现顺序之前生效:作用域根距匹配元素 DOM 跳数最少者胜;不在任何作用域内的规则视为无限邻近。邻近度不覆盖 !important、层叠层和特异性。
- 提供决策树:按第三方重置、元素默认、设计令牌、组件规则、工具类归置 CSS;判断何时用 @layer、何时用 @scope;并解释未分层规则胜出的原因与修法。
- 提供典型模式:规范层序与第三方隔离、donut 作用域阻止嵌套穿透、主题就近生效、revert-layer 撤销组件覆盖。
- 限制与注意:截至资料标注,@layer 自 2022 年 3 月起广泛可用,@scope 自 2025 年 12 月起才新近可用,须用 @supports at-rule(@scope) 做特性检测并提供回退,直至其达到广泛可用;@scope 不隔离继承,勿在 @media 内声明 @layer 并期望顺序持久,勿过度作用域,勿用 :scope 代替裸选择器。安装与环境限制暂未提供。