有没有办法在指定带透明度的渐变颜色时使用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));
}
rgba()
指定和控制单独的R、G和B值,您需要为每个颜色组件指定一个十进制值的变量,并在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));
}
// Scss
@mixin defineColorRGB ($color, $red, $green, $blue) {
#{$color}: unquote("rgb(#{$red}, #{$green}, #{$blue})");
#{$color}-r: #{$red};
#{$color}-g: #{$green};
#{$color}-b: #{$blue};
}
::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变量,并在大多数项目中使用它。
calc()
在颜色空间内的一些东西。 - c-smilevar()
中,可以出现值的任何部分,只要值替换结果是有效的声明(请参见http://www.w3.org/TR/css-variables-1/#using-variables)。确实,[它在唯一的当前实现上运行](http://jsfiddle.net/BoltClock/f5drrLph)。 - BoltClockrgb()
/rgba()
语法而言,它看到的只是在替换后的rgba(223, 208, 165, 1)
。如果其中一个变量超出了0-255范围的数字或根本不是数字,则在替换该值后,该值将变得无效。 - BoltClock