CSS:root变量和SASS函数

时间:2018-10-02 07:32:38

标签: css sass

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

:root{ 
  --data-color-primary: #ffcc00; 
  --data-color-secondary: #4b4b4b; 
}

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

DIV.color {

   &.color-primary {
     background-color: var(--data-color-primary);
   }
   &.color-secondary {
     background-color: var(--data-color-secondary);
   }
}

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

@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));
   }
}

但是在我的SASS-compliler中,我得到以下错误:

  

错误:$color的参数lightness($color)必须是颜色

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


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

$primary: ${clr_primary};
$secondary: ${clr_primary};

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

2 个答案:

答案 0 :(得分:4)

SASS

在CSS变量中使用SASS变量。

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

:root{ 
  --data-color-primary: $primary; // Use #{$primary} if you use SASS v3.5.6+
  --data-color-secondary: $secondary; // Use #{$secondary} if you use SASS v3.5.6+
}

现在打电话给您的混音

DIV.color{
   &.color-primary {
      background-color: $primary;
      color: set-notification-text-color($primary);
   }
}

另一种选择是创建一个可获取CSS变量的mixin

@function color($color-name) {
  @return var(--data-color-#{$color-name});
}

现在像这样调用该函数

DIV.color {
   &.color-primary {
      background-color: color(primary);
      color: set-notification-text-color(color(primary));
   }
}

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

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


SASS> v3.5.6

由于:root元素内的 SASS v3.5.6 设置属性如上所述无法正常工作。而是使用下面的代码。

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

:root{ 
  --data-color-primary: #{$primary}; 
  --data-color-secondary: #{$secondary}; 
}

答案 1 :(得分:0)

如果您需要在:root之外更改CSS变量,则可以执行以下操作

.class {
  // sass-lint:disable no-duplicate-properties
  #{--background}: transparent;      
  #{--background-focused}: transparent;
  // sass-lint:enable no-duplicate-properties
}

然后编译为

.class {
  --background: transparent;      
  --background-focused: transparent;
}