CSS 自定义属性值中 !important 的令人惊讶的行为

Avatar of Chris Coyier
Chris Coyier

DigitalOcean 为您旅程的每个阶段提供云产品。 立即开始使用 $200 免费赠送额度!

嗯! 我没有意识到 CSS 自定义属性在其值的 !important 工作方式方面有其自己的解析行为。 呃,尽管 写了一份指南 关于它们。 😬 但现在它已更新。

Stefan Judis 清楚地记录了它。 问题是 !important 在最终值中根本没有使用。 所以

div {
  --color: red !important;
  color: var(--color);
  color: yellow;
}

感觉 red 应该获胜,但因为 !important 最终从自定义属性值中删除,所以 yellow 获胜。 而且这与 color 声明的顺序无关 - 如果 color: red !important; 是第一个声明,那么 red 就会获胜。

但这不像 !important 只是被删除和忽略; 它是以作用域方式使用的,会影响哪个自定义属性值获胜。 但是,当该值被应用时,!important 就消失了。 Stefan 的示例

div {
  /*
    `!important` overrules the
    other `--color` definitions
  */
  --color: red !important;
  color: var(--color);
}

.class {
  --color: blue;
}

#id {
  --color: yellow;
}

这感觉很奇怪(对我来说),因为你会认为在 #id 上声明的 yellow 会获胜,因为它具有最高的特殊性。 但是这就是作用域行为的处理方式 - !important 使 red 成为获胜者,然后像这样应用于 color

直接链接 →