CSS :root 变量和 SASS 函数

hyd*_*cus 4 css sass

在我的 HTML 页面的标题中,我设置了以下 CSS 变量:

:root{ 
  --data-color-primary: #ffcc00; 
  --data-color-secondary: #4b4b4b; 
}
Run Code Online (Sandbox Code Playgroud)

在我的 SASS 文件中,我按如下方式使用它:

DIV.color {

   &.color-primary {
     background-color: var(--data-color-primary);
   }
   &.color-secondary {
     background-color: var(--data-color-secondary);
   }
}
Run Code Online (Sandbox Code Playgroud)

现在我尝试根据背景颜色的亮度设置字体颜色:

@function set-notification-text-color($color) {
  @if (lightness($color) > 60) {
     @return #000000;
  } @else {
     @return #ffffff;
  }
}

DIV.color{
   &.color-primary {
      background-color: var(--data-color-primary);
      color: set-notification-text-color(var(--data-color-primary));
   }
}
Run Code Online (Sandbox Code Playgroud)

但是在我的 SASS 编译器中,我得到以下错误:

错误:参数$colorlightness($color)必须是一种颜色

如何将 der CSS 变量移交给函数。


我的问题是,CSS 变量由用户(Liferay 7)在我的 CMS 的后端设置,并将呈现在 *.FTL 文件中并打印在 HTML 代码中。

$primary: ${clr_primary};
$secondary: ${clr_primary};
Run Code Online (Sandbox Code Playgroud)

然后我不能在我的 SASS 文件中使用 SASS 变量 $primary。

Red*_*Red 14

在 CSS 变量中使用 SASS 变量。

$primary: #ffcc00;
$secondary: #4b4b4b;

:root{ 
  --data-color-primary: #{$primary};
  --data-color-secondary: #{$secondary};
}
Run Code Online (Sandbox Code Playgroud)

现在调用你的 mixin

DIV.color{
   &.color-primary {
      background-color: $primary;
      color: set-notification-text-color($primary);
   }
}
Run Code Online (Sandbox Code Playgroud)

另一种选择是创建一个 mixin 来检索 CSS 变量

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

现在像这样调用该函数

DIV.color {
   &.color-primary {
      background-color: color(primary);
      color: set-notification-text-color(color(primary));
   }
}
Run Code Online (Sandbox Code Playgroud)

查看此链接以获取有关组合 CSS 和 SASS 变量的有用信息

https://codepen.io/jakealbaugh/post/css4-variables-and-sass

  • 如果您在 :root { } 中使用 Sass 变量,它们将不会被编译为它们的值。把下面的代码放到https://www.sassmeister.com/,你就会看到。然后切换版本。$primary: #ffcc00; $secondary: #4b4b4b; :root{ --data-color-primary: $primary; --data-color-secondary: $secondary; } (2认同)