有什么方法可以在SASS函数中使用CSS变量吗?

sam*_*pls 5 sass css3 css-variables

我在根中定义了一种颜色:

:root {
--purple: hsl(266, 35%, 70%);
}
Run Code Online (Sandbox Code Playgroud)

我正在尝试在SASS函数中使用它来提高透明度:

.purple {
  background: transparentize(#{"var(--primary-color)"}, 0.7)
}
Run Code Online (Sandbox Code Playgroud)

有谁知道使它工作的方法?还是只是不可能?

小智 11

#{var(--variablename)}
Run Code Online (Sandbox Code Playgroud)

这就是在 SCSS 中使用 CSS 变量的方式

  • 不应该。您可以像这样在 SCSS 中使用 CSS 变量,但不能在 SCSS 函数中使用。这个问题具体是关于函数的。`transparentize(#{var(--someColor)}, 0.7)` 将不起作用(由于评论和其他答案中提到的原因) (8认同)

Rom*_*lex 9

如果您正在寻找一种使用 sass 颜色函数来调整颜色的方法(我觉得这是人们来到这里的主要原因),这里有一个适合您的解决方案。这个想法与 Juanete Montoya 的答案相同,但它是纯 sass/scss (没有 php):

首先,我们需要将颜色拆分为 hsla 值,并将每个值保存在单独的自定义属性中。

@mixin define-color($title, $color) {
    --#{$title}-h: #{hue($color)};
    --#{$title}-l: #{lightness($color)};
    --#{$title}-s: #{saturation($color)};
    --#{$title}-a: #{alpha($color)};
}
Run Code Online (Sandbox Code Playgroud)

现在我们可以将其重新组合在一起,并在途中进行一些调整。

@function color($title, $hue: 0deg, $lightness: 0%, $saturation: 0%, $alpha: 0) {
    @return hsla(
        calc(var(--#{$title}-h) + #{$hue}), 
        calc(var(--#{$title}-s) + #{$saturation}),
        calc(var(--#{$title}-l) + #{$lightness}),
        calc(var(--#{$title}-a) + #{$alpha}),
    );
}
Run Code Online (Sandbox Code Playgroud)

现在我们准备定义一些颜色变量......

:root {
    @include define-color("primary", #696969);
    @include define-color("secondary", blue);
}
Run Code Online (Sandbox Code Playgroud)

使用并调整它们!

.example-class {
    color: color("primary");
    background: color("secondary", $lightness: +20%, $alpha: -0.3);
    border: 1px solid color("primary", $hue: -30deg, $saturation: 5%);
}
Run Code Online (Sandbox Code Playgroud)


Kei*_*ina 7

全局变量可以在:root伪类的元素外部定义:

:root {
  --color-background: #FFFFFF;
}
Run Code Online (Sandbox Code Playgroud)

您可以定义如下函数:

@function color($color-name) {
  @return var(--color-#{$color-name});
}
Run Code Online (Sandbox Code Playgroud)

并把它叫到你的无礼

body { 
  color: color(primary); 
}
Run Code Online (Sandbox Code Playgroud)

编译的sass代码是:

body { 
  color: var(--color-primary); 
}
Run Code Online (Sandbox Code Playgroud)

  • @orionrush 不,不是。`transparentize()` 需要一个十六进制代码。该函数输出一个无效的“var()”字符串。 (13认同)
  • 这没有回答原来的问题 (5认同)
  • 这根本没有回答问题。我不知道为什么它被赞成。也许我错了,你能举一个问题中“透明化”的例子吗? (3认同)
  • 这没有回答原来的问题 (2认同)

Har*_*len 6

不幸的是,这是不可能的。CSS 变量在运行时替换它们的值。SASS 编译器就是这样一个编译器,它无法读取 CSS 变量的值,因为 CSS 变量可以在其他文件中定义。