21

有没有办法在指定具有透明度的渐变颜色时使用 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));
}
4

2 回答 2

33

您可以使用变量,但不能从 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));
}
于 2015-04-12T16:11:11.513 回答
0

@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 变量,并在我的大多数项目中使用它。

于 2021-12-10T00:15:09.787 回答