问题描述
:root {
--brand-color: blueviolet;
--button-background-color: var(--brand-color);
}
body {
--brand-color: blue;
}
button {
background-color: var(--button-background-color);
border: none;
color: #fff;
border-radius: 4px;
padding: 4px 10px;
}
<html>
<body>
<button>Button</button>
</body>
</html>
在body {...}
选择器中,我覆盖了--brand-color
变量。该按钮位于主体中,但按钮的背景颜色仍设置为根中定义的--brand-color
。我知道这是CSS变量的默认行为,但是有人可以向我解释为什么会发生这种情况,以及在此处覆盖变量的正确方法是什么?提供的是,我不想在button {...}
选择器中覆盖它。
解决方法
这是正在发生的事情:
-
--brand-color
设置为blueviolet
-
--button-background-color
设置为--brand-color
的当前值(不是对变量的引用) -
--brand-color
的值设置为blue
由于--button-background-color
从未重置,因此它保持原始值。
您可以直接使用品牌颜色,它的值正确。
button {
background-color: var(--brand-color);
...
}