我正在编写一些 sass 来根据一系列参数生成一组图标。我有一个函数可以分析一组变量,然后返回一个“场景”变量,该变量又用于过滤从存储所有内容的嵌套地图中获取的信息。
从嵌套映射中检索信息的代码如下:
@each $key-lv0, $lv0 in $icon-config {
@if($key-lv0 == $scenario) {
.icon{
@each $key-lv1, $lv1 in $lv0 {
@if type-of($lv1) != "map" {
#{$key-lv1}: $lv1;
}
@each $key-lv2, $lv2 in $lv1 {
@if type-of($lv2) != "map" {
.#{$key-lv1} {
#{$key-lv2}: $lv2;
}
}
@each $key-lv3, $lv3 in $lv2 {
@if($key-lv2 == "hover") {
.#{$key-lv1}:#{$key-lv2} {
#{$key-lv3}: $lv3;
}
} @else {
.#{$key-lv1} #{$key-lv2} {
#{$key-lv3}: $lv3;
}
}
}
}
}
}
}
}
...这会产生以下内容:
.icon .icon-header {
background-color: #00a9f0;
}
.icon .icon-header:hover {
border-color: #040100;
}
... etc ...
...这很好 - 除了我稍后会处理的重复声明之外。
问题是“.icon”和“.icon-header”之间的上限。这些类都将在单个元素中使用,并且要正确解释 css,它需要生成如下内容:
.icon.icon-header {
background-color: #00a9f0;
}
.icon.icon-header:hover {
border-color: #040100;
}
我试过像这样把“.icon”降下来:
@if type-of($lv1) != "map" {
.icon#{$key-lv1}: $lv1;
}
并将其从顶部删除,但 sass 拒绝此操作并出现以下错误:
错误:属性只能在规则、指令、mixin 包含或其他属性中使用。
这似乎是一件微不足道的事情,但它一直困扰着我,我似乎无法找到答案。