有没有办法在指定具有透明度的渐变颜色时使用 CSS 变量,例如
:root {
--accent-color: #dfd0a5;
}
h1{
background: linear-gradient(to right, rgba(255, 255, 255, 0), rgba(red(var(--accent-color)), green(var(--accent-color)), blue(var(--accent-color)), 1));
}
有没有办法在指定具有透明度的渐变颜色时使用 CSS 变量,例如
:root {
--accent-color: #dfd0a5;
}
h1{
background: linear-gradient(to right, rgba(255, 255, 255, 0), rgba(red(var(--accent-color)), green(var(--accent-color)), blue(var(--accent-color)), 1));
}
您可以使用变量,但不能从 CSS 中的单个十六进制值中采样单个红色、绿色和蓝色分量。
如果您只是想将 alpha 分量应用于现有的 RGB 三元组,则可以将整个三元组指定为以逗号分隔的十进制值列表rgba()
而不是十六进制值,并将其作为单个不透明标记直接替换到函数中:
:root {
--accent-color: 223, 208, 165;
}
h1 {
background: linear-gradient(to right, rgba(255, 255, 255, 0), rgba(var(--accent-color), 1));
}
如果要使用 指定和控制单个 R、G 和 B 值rgba()
,则需要为每个颜色分量指定一个变量作为十进制值,并在rgba()
函数中引用每个变量,如下所示:
:root {
--accent-red: 223;
--accent-green: 208;
--accent-blue: 165;
}
h1 {
background: linear-gradient(to right, rgba(255, 255, 255, 0), rgba(var(--accent-red), var(--accent-green), var(--accent-blue), 1));
}
@boltclock 说了这么多,但是如果您的项目有 scss 预处理器,您可以节省一些时间。
你可以做一些调整来实现你想要的:
// Scss
@mixin defineColorRGB ($color, $red, $green, $blue) {
#{$color}: unquote("rgb(#{$red}, #{$green}, #{$blue})");
#{$color}-r: #{$red};
#{$color}-g: #{$green};
#{$color}-b: #{$blue};
}
然后在你的CSS中,你可以这样做:
::root {
@include defineColorRGB(--accentColor, red(#dfd0a5), green(#dfd0a5), blue(#dfd0a5));
}
您最终将得到 4 个不同的 CSS 变量,一个用于您的颜色,一个用于每个颜色通道。
然后,您几乎可以像编写它一样使用它:
h1{
background: linear-gradient(
to right, rgba(255, 255, 255, 0),
rgba(var(--accent-color-r), var(--accent-color-g), var(--accent-color-b), 1)
);
}
我发现它是一种非常方便的方式来初始化我的 css 变量,并在我的大多数项目中使用它。