@layer 只能在 css 文件或标签内使用,html 中无此语法;它通过声明层名和顺序控制样式优先级,未分层样式优先级最高,第三方库需用@import layer()导入才能被覆盖。

@layer 不能在 HTML 中直接使用,它只存在于 CSS 文件或 <style></style> 标签内。HTML 本身没有 @layer 语法;所谓“HTML 中用 @layer”,实际是指在 HTML 的 <style></style> 块或通过 <link> 引入的外部 CSS 中书写 @layer 规则。
为什么 @import + layer() 是控制第三方样式优先级的关键
你想覆盖一个第三方 UI 库(比如 Bootstrap 或 Element Plus)的默认样式,但又不想改它的源码、也不愿写更重的选择器或加 !important——这时最干净的做法是把它的整个样式表导入到一个明确命名的层里,再在后续层中定义你的覆盖规则。
-
@import必须出现在 CSS 文件最顶部(在任何规则之前),且只能用于外部样式表 - 写法必须是
@import "path/to/lib.css" layer(framework);,括号里是层名,不能带引号 - 浏览器按
@layer声明顺序(不是文件加载顺序)决定优先级,所以你要确保@layer framework;出现在你自定义样式的层声明之前 - 如果第三方库本身用了
@layer,它内部的层结构仍受你顶层@layer声明顺序约束
@layer base, components, overrides; 这种批量声明的坑在哪
这种写法看起来简洁,但它只是「声明层名和顺序」,不包含任何样式。很多人误以为写了这行就等于创建了可复用的命名空间,结果后续在 @layer components { ... } 里写的样式没生效——其实是因为漏了关键一点:这些层名必须在所有样式规则之前统一声明,且不能重复声明同名层(否则后一次会被忽略)。
如果你了解HTML,CSS和JavaScript,您已经拥有所需的工具开发Android应用程序。本动手本书展示了如何使用这些开源web标准设计和建造,可适应任何Android设备的应用程序 - 无需使用Java。您将学习如何创建一个在您选择的平台的Android友好的网络应用程序,然后转换与自由PhoneGap框架到一个原生的Android应用程序。了解为什么设备无关的移动应用是未来的潮流,并开始构建应用程序,提供更
- 必须顶层、无嵌套:不能包在
@media、@supports或选择器块里 - 声明后可多次扩展:比如先写
@layer utilities;,后面再写@layer utilities { .text-sm { font-size: 0.875rem; } },会自动合并 - 但若你先写了
@layer theme;,又在另一个 CSS 文件里重复写@layer theme;,第二个声明无效,不会提升优先级 - DevTools 的 Elements 面板 → Styles 侧边栏 → Origin 列能看到某条规则属于哪个
@layer,这是验证是否生效的最快方式
未分层样式永远压过所有 @layer 内的规则
这是最容易被忽略的隐性陷阱。如果你在 <style></style> 标签里写了 p { color: red; },又在同一个文件里写了 @layer base { p { color: blue; } },最终生效的是红色——因为未包裹在任何 @layer 中的样式,属于“隐式顶层”,优先级高于所有显式声明的层。
- 这个隐式顶层无法命名、无法控制顺序,也无法被
@layer覆盖 - 想让业务样式真正主导,就得把所有自定义规则都放进
@layer,包括重置、工具类、组件样式 - 第三方库若没用
@layer,它所有规则都落在隐式顶层;此时你只能靠把它@import layer(...)进来,再用更高层覆盖 - 内联样式(
style="")和!important依然有效,但它们作用于单条声明,不改变层间关系
真正难的不是写对语法,而是把整个项目的样式组织逻辑提前想清楚:哪些该归为 base,哪些算 components,哪些是 runtime 注入的 theme 层——一旦层名和职责定下来,后续增删改就只是往对应层里填内容,而不是反复调权重、修冲突。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!










