提问人:Meek 提问时间:11/15/2023 更新时间:11/15/2023 访问量:21
如何在 SASS 中循环嵌套映射
How to loop nested maps in SASS
问:
我正在尝试在 sass 中循环嵌套地图,以便为主题列表创建某些 css 变量。
我有这样的主题地图:
$themes: (
theme-1: (
primary: (
"el-background": #000,
"el-background-hover": #0d0d0d,
"el-color": #2c2f33,
"el-link-color": #fff,
),
secondary_1: (
"el-background": #000,
"el-background-hover": #ccc,
"el-color": #f2f2f2,
"el-link-color": #fff,
)
),
theme-2: (
primary: (
"el-background": #f90,
"el-background-hover": #ccc,
"el-color": #000,
"el-link-color": #fff,
),
secondary_1: (
"el-background": #f2f2f2,
"el-background-hover": #000,
"el-color": #f2f2f2,
"el-link-color": #fff,
)
)
);
我期待在css中得到这样的结果:
.theme-1 {
.primary {
--el-background: ...;
--el-background-hover: ...;
--el-color: ...;
--el-link-color: ...;
}
.secondary_1 {
--el-background: ...;
--el-background-hover: ...;
--el-color: ...;
--el-link-color: ...;
}
}
.theme-2 {
.primary {
--el-background: ...;
--el-background-hover: ...;
--el-color: ...;
--el-link-color: ...;
}
.secondary_1 {
--el-background: ...;
--el-background-hover: ...;
--el-color: ...;
--el-link-color: ...;
}
}
如何调整此循环以实现此目的?我想我需要把它包装在另一个中,但不确定如何。@each
@mixin theme() {
@each $theme, $map in $themes {
.#{$theme} {
@each $key,
$value in $map {
--#{$key}: #{$value};
}
}
}
}
答:
0赞
OlegWock
11/15/2023
#1
您只需要添加另一个循环来遍历“primary”和“secondary_1”中的值。像这样的东西:
@mixin theme() {
@each $theme, $map in $themes {
.#{$theme} {
@each $key, $value in $map {
.#{$key} {
@each $varName, $varValue in $value {
--#{$varName}: #{$varValue};
}
}
}
}
}
}
:root {
@include theme();
}
SCSS playground 上的解决方案
评论