我正在设计一个电子应用程序,所以我可以访问 CSS 变量。我在 vars.css
中定义了一个颜色变量:
:root {
--color: #f0f0f0;
}
我想在 main.css
中使用这种颜色,但应用了一些不透明度:
#element {
background: (somehow use var(--color) at some opacity);
}
我该怎么做呢?我没有使用任何预处理器,只有 CSS。我更喜欢全 CSS 的答案,但我会接受 JavaScript/jQuery。
我不能使用 opacity
因为我使用的背景图像不应该是透明的。
原文由 jotch 发布,翻译遵循 CC BY-SA 4.0 许可协议
您不能采用现有的颜色值并将 Alpha 通道应用到它。也就是说,您不能采用现有的十六进制值,例如
#f0f0f0
,给它一个 alpha 分量并将结果值与另一个属性一起使用。但是,自定义属性允许您将十六进制值转换为 RGB 三元组以与
rgba()
一起使用,将该值存储在自定义属性中(包括逗号!),使用var()
替换该值---
使用您想要的 alpha 值进入rgba()
函数,它会正常工作:这似乎好得令人难以置信。 1它是如何工作的?
神奇之处在于,在计算属性值 _之前_,在替换属性值中的
var()
引用时,自定义属性的值会 被 替换。这意味着就自定义属性而言,在您的示例中--color
的值根本不是颜色值, 直到var(--color)
表达式出现在需要颜色值的某处(并且仅在这种情况下)。从 css-variables 规范的 第 2.1 节:#element { background-color: rgba(240, 240, 240, 0.8); }
:root { –color: 240, 240, 240; –alpha: 0.8; }
#element { background-color: rgba(var(–color), var(–alpha)); }
”`
这允许您拥有不同的 alpha 值,您可以在运行中交换这些值。
1好吧,如果您在不支持自定义属性的浏览器中运行代码片段。