提问人:Shannon Hochkins 提问时间:11/7/2023 更新时间:11/7/2023 访问量:52
CSS 变量覆盖 [duplicate]
CSS variable override [duplicate]
问:
我有一个非常简单的 codepen 设置来尝试概述我想要实现的目标。
我想设置一个默认的css变量来控制颜色的色调,但是在元素级别,我希望能够根据覆盖更改颜色,在本例中:--h
:root {
// use 50 if --h isn't defined
--hue: var(--h, 50);
}
.a {
background-color: hsl(var(--hue), 100%, 50%);
display: block;
width: 100px;
height: 100px;
}
.a.b {
// should change the hsl value to use 180, but it's using 50
--h: 180;
}
上面的 css(应该)更改具有类 & 的元素的色调,但是它始终解析为第二个元素的父值 50。b
a
令我感到困惑的是,通过在其中提供回退值可以工作,但这是不可取的,因为我的实际主题 css 要复杂得多:.a
background-color: hsl(var(--h, var(--hue)), 100%, 50%);
答:
1赞
Quentin
11/7/2023
#1
的值是使用适用于 的值 计算的。它不会存储您正在使用的事实,然后在您更改了 的元素上计算它。(你最终可能会得到无限循环,CSS试图避免这种循环成为可能)。—-hue
—-h
:root
—-h
.a.b
—-h
我不认为除了通过你排除的方法之外,没有其他方法可以实现你想要的。
评论
0赞
Shannon Hochkins
11/7/2023
我是这么想的 - 希望有一个我没有想到的巫师解决方案 - 无论如何,谢谢!
0赞
Shannon Hochkins
11/7/2023
将 :root 更改为 * 似乎有效,但是我不确定性能/其他影响 - 您对此有任何想法吗?
0赞
Quentin
11/7/2023
这将影响性能,但可能不会产生实质性影响,并且可能会把事情搞砸,这取决于你期望如何继承你的风格。
0赞
Shannon Hochkins
11/8/2023
经过快速测试 - 它不是 im 之后的内容,因为变量被分配给每个元素,因此覆盖 --hue 值只会更新当前元素,而不是它的兄弟姐妹
0赞
Quentin
11/8/2023
这就是我关于继承的评论的意思。
评论