Skip to content

层叠层与作用域 ​

@layer 把样式分成有顺序的层,先声明层顺序就能让 reset、组件和覆盖规则拥有稳定关系,减少不断增加选择器特异性的需要。

css
@layer reset, components, utilities;
@layer reset { *, *::before, *::after { box-sizing: border-box; } }
@layer components { .card { color: black; } }
@layer utilities { .muted { color: gray; } }

层顺序、来源、重要性和特异性共同决定结果;后层的低特异性规则可以胜过前层的高特异性规则。@scope 可以限制规则作用范围,但作用域不是 Shadow DOM,也不会自动隔离所有脚本和资源。

实验与练习 ​

把一套样式拆成 reset、components 和 utilities 三层,故意让组件选择器比工具类更复杂,观察层顺序如何决定颜色。移动层声明顺序后重新记录结果,并说明为什么不需要增加 ID。

可运行微实验:能力检测与降级 ​

先用 @supports 检测容器查询、cascade layers 或逻辑属性,再在支持与不支持路径提供同一内容的可用布局。用不同语言方向和不同容器宽度测试,记录哪些样式来自现代能力、哪些来自基础 CSS。

常见错误 ​

  • 层声明顺序与文件加载顺序混淆。
  • 认为 @layer 会隔离 DOM、事件或 JavaScript。
  • 把所有覆盖都放在 utilities,导致组件契约失去边界。

继续阅读 ​

下一篇用 min()、max() 和 clamp() 进行受约束计算:计算函数。

练习 ​

  1. 用最小输入复现“层叠层与作用域”的成功路径,并记录可观察结果。
  2. 改变一个时序、数据或宿主条件,解释结果为何变化。
  3. 删除清理、校验或降级分支,写出能证明缺陷的断言。

查看本节答案

用心记录每一步成长