覆盖 css 变量

问题描述

我有一个声明并使用 css 变量“--test: red”的组件

但是我想在这个组件之外用新的颜色重新声明这个变量。

https://stackblitz.com/edit/js-va9k9q?file=style.css

这个规则对吗?

:root *{
  --test: green;
}

为什么需要*?如果我删除它,它就不起作用

:root *{
  --test: green;
}
#app {
  --test: red;
}
#app h1{
  background-color: var(--test);
}

HTML

<html>
<body>
    <div id="app"><h1>Example</h1></div>
</body>
</html>

最终结果必须有绿色背景色

解决方法

如果您只想考虑 :root

,请使用第二个变量

:root {
  --new: green;
}

#app {
  --test: red;
}

#app h1 {
  background-color: var(--new,var(--test)); /* will fallback to "test" if "new" is not defined */
}
<div id="app">
  <h1>Example</h1>
</div>

或者您继续使用您显示的正确代码,因为您将针对所有元素(使用 *)来设置将被使用的变量 --test,而不是从 {{ 1}}

enter image description here

,

这是关于 css 选择器的排序和优先级

如果你喜欢这样:

:root {
  --test: red;
}

.
.
.

:root {
  --test: green;
}

第二个选择器有更多的优先权

但如果你这样做:

:root #app{
  --test: green;
}

.
.
.

:root {
  --test: red;
}

第一个选择器将应用于#app。 如果在#app 之外定义了另一个块,它会变成红色。

:root * {} 之所以有效,是因为它具有更高的优先级。

this link中阅读有关优先级的更多信息

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...