使用带有rgba的CSS变量来实现渐变透明度

Man*_*ish 8 css css-variables

在指定具有透明度的渐变颜色时,有没有办法使用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));
}
Run Code Online (Sandbox Code Playgroud)

Bol*_*ock 22

您可以使用变量,但不能从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));
}
Run Code Online (Sandbox Code Playgroud)

如果要指定和控制单独的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));
}
Run Code Online (Sandbox Code Playgroud)

  • @ c-smile:来自spec链接:"如果一个属性包含一个或多个var()函数,并且这些函数在语法上有效,则必须假定整个属性的语法在分析时有效.它只是语法检查在var()函数被替换之后的计算值时间." 因此就`rgb()`/`rgba()`语法而言,所有它看到的都是`rgba(223,208,165,1)`,在执行了替换之后.如果其中一个变量是0-255范围之外的数字,或者根本不是数字,那么在替换该值之后该值将变为无效. (2认同)