首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >嵌套sass映射的循环问题

嵌套sass映射的循环问题
EN

Stack Overflow用户
提问于 2022-01-17 22:32:26
回答 1查看 50关注 0票数 0

我有一张简单的彩色sass地图。我循环通过它并生成css vars。到目前为止效果很好。

代码语言:javascript
复制
$colors: (
  primary: red,
  secondary: blue,
)

@each $color, $value in $colors {
    --#{$color}: #{$value};
}

然后我用主题扩展了这张地图。在那里,我再次循环每个主题并创建css vars。这也很好用。

代码语言:javascript
复制
$colors2: (
  theme-1: (
    primary: red,
    secondary: blue,
  ),
  theme-2: (
    primary: yellow,
    secondary: pink,
  )
)

@each $theme, $colors in $colors2 {
    &[data-theme="#{$theme}"] {
        @each $color, $value in $colors {
            --#{$color}: #{$value};
        }
    }
}

但现在我需要找到一种将两者结合起来的方法。不幸的是,到目前为止,我还没有找到一种方法来循环下面的列表,创建单个css vars和数据属性+ css vars。

代码语言:javascript
复制
$colors3: (
  primary: green,
  secondary: purple,
  theme-1: (
    primary: red,
    secondary: blue,
  ),
  theme-2: (
    primary: yellow,
    secondary: pink,
  )
)

你们中有人知道我是怎么做到的吗?最后,像这样的事情应该会出现:

代码语言:javascript
复制
:root {
  --color-primary: green;
  --color-secondary: purple;

  &[data-theme="theme-1"] {
  --color-primary: red;
  --color-secondary: blue;
  }
  &[data-theme="theme-2"] {
  --color-primary: yellow;
  --color-secondary: pink;
  }
 }

非常感谢您的帮助!

亲切问候马可

EN

回答 1

Stack Overflow用户

发布于 2022-01-18 19:47:28

我找到了一个让它开始工作的方法:)

这是我的解决方案,以防万一,别人需要它。

代码语言:javascript
复制
:root {
    @each $key, $value in $colors {
        @if type-of($value) == map {
            &[data-theme="#{$key}"] {
                @each $theme-key, $theme-value in $value {
                    --color-#{$theme-key}: #{$theme-value};
                }
            }
        } @else {
            --color-#{$key}: #{$value};
        }
    }
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70748272

复制
相关文章

相似问题

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