跳到主要内容

层叠层:为什么样式更好覆盖了

CSS 的 @layer 改变了优先级规则。弄清 base、components、utilities 三层的关系,能省掉很多 !important。

246 字

在层叠层出现之前,覆盖样式主要靠选择器权重和书写顺序。现在多了一个维度:层与层的先后关系,而且它比权重更优先。

@layer base, components, utilities;
@layer base {
a {
color: var(--link);
}
}
@layer utilities {
.text-primary {
color: var(--primary);
}
}

同一条链接,同时命中 base 里的 a 和 utilities 里的 .text-primary,胜出的是后者 —— 不是因为类选择器权重更高,而是因为 utilities 层排在后面。

反过来用

未分层的样式优先级高于所有分层样式。所以给第三方组件打补丁时,把覆盖写在层外面,往往不用加权重:

/* 不需要 a.x.y.z */
.prose pre {
border-radius: 0.75rem;
}

这也是为什么 Tailwind 4 的用户样式能轻松盖过它的工具类。

注意

层名一旦排定顺序,就不能在别处重新排;后出现的 @layer 声明只会往已有的层里追加内容。把所有 @layer 的声明集中写在一处,比散落在文件里可靠得多。

版权声明

本文由 XiaYe 创作,采用 CC BY-NC-SA 4.0 许可协议;转载请注明出处。

作者
XiaYe
发布于
许可协议
CC BY-NC-SA 4.0

分享这篇文章:

相关文章

评论

留下你的想法,或看看别人说了什么。