首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何通过attr()将HTML ``data` string属性传递给SCSS?

如何通过attr()将HTML ``data` string属性传递给SCSS?
EN

Stack Overflow用户
提问于 2019-04-11 15:26:38
回答 1查看 1.8K关注 0票数 3

我试图在SCSS中设置一个配色方案,其中我可以使用以下HTML:

代码语言:javascript
复制
<div class="swatch" data-bg="green">...</div>

我有一个SCSS混合器定义如下:

代码语言:javascript
复制
@function color($key: 'black') {
  @return map-get($colors, $key);
}

因此,如果我将它传递给background-color: color('green'),它将查看$colors: ( ... )映射,查看'green': #009900,并将background-color: #009900;作为CSS返回。

当我试图将data-bg属性值传递给color() SCSS时,问题就出现了,如下所示:

代码语言:javascript
复制
.swatch[data-bg] {
  background-color: color(attr(data-bg));
}

这不管用。我希望它像这样解析值:

color(attr(data-bg))color('green')#009900

然而,SCSS根本不会在CSS中呈现background-color行。

我有个科普,你可以看看我想要什么。这里是“棕色”颜色的样本:https://codepen.io/rbrum/pen/axZLxw

任何帮助都将不胜感激。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-04-29 17:22:06

对于其他遇到这个问题的人来说,这里是我如何解决我的问题的。

我不依赖于data-属性,而是依赖类名。例如,每当我想要一个具有特定背景色的元素时,我都会使用类名,比如.bg-amber.bg-purple。我的颜色被定义为:

代码语言:javascript
复制
$colors: (
  'black': #000000,
  'white': #FFFFFF,
  // ...
  'amber': #FFBF00,
  'purple': #800080,
  // ...
);

为了更容易地访问颜色,我定义了一个按名称调用任何颜色的函数:

代码语言:javascript
复制
@function c($key: 'black') {
  @return map-get($colors, $key);
}

然后,我定义了一个混音,给出了一个颜色名称,它将应用于背景颜色。我还可以向它传递CSS属性中使用的前缀。

代码语言:javascript
复制
@mixin bg($color-name, $prefix: '') {
  .#{$prefix}#{$color-name} {
    background-color: c($color-name);
  }
}

如果我想在一次性的情况下使用它,我会像这样使用它:

代码语言:javascript
复制
@include bg('amber', 'bg-');

...which将生成以下内容:

代码语言:javascript
复制
.bg-amber {
  background-color: #FFBF00;
}

最后,我使用@each循环对所有颜色执行此操作:

代码语言:javascript
复制
@each $color-name, $color-val in $colors {
  @include bg($color-name, 'bg-');
}

我还可以定义一个“前台”版本:

代码语言:javascript
复制
@mixin fg($color-name, $prefix: '') {
  .#{$prefix}#{$color-name} {
    color: c($color-name);
  }
}

然后,我可以在@each循环中使用它,就在bg()用法下面:

代码语言:javascript
复制
@each $color-name, $color-val in $colors {
  @include bg($color-name, 'bg-');
  @include fg($color-name, 'txt-');
}

它也可以扩展到像边框颜色,框阴影,等等。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55636102

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档