我需要以某种方式创建使用SCSS和占位符完成的CSS输出
这是我想要的输出
.myclass {
color: silver;
}
.myclass-gold {
color: gold;
}
当我尝试这样的SCSS placeholder
时%placeholder {
color: silver;
#{&}-gold {
color: gold;
}
}
.myclass {
@extend %placeholder !optional;
}
我只得到这个结果
.myclass {
color: silver;
}
黄金部分完全掉落。
我需要一个占位符,因为我使用了许多选择器,例如a.myclass
,input.myclass
等,并且不希望这些爆炸的@export
如果我不使用占位符而是使用随机选择器 - 并取一些extry字节 - 输出不正确,
ae739ab7 {
color: silver;
#{&}-gold {
color: gold;
}
}
.myclass {
@extend ae739ab7 !optional;
}
产量
ae739ab7, .myclass {
color: silver;
}
ae739ab7 ae739ab7-gold, .myclass ae739ab7-gold {
color: gold;
}
和
ae739ab7 {
color: silver;
&-gold {
color: gold;
}
}
.myclass {
@extend ae739ab7 !optional;
}
给了我
ae739ab7, .myclass {
color: silver;
}
ae739ab7-gold {
color: gold;
}
此处缺少的内容始终是选择器.myclass-gold
这有可能以某种魔术技巧吗?
答案 0 :(得分:4)
仅扩展完全匹配的工作。当你这样写:
%placeholder {
color: silver;
#{&}-gold {
color: gold;
}
}
你真正创造的是:
%placeholder {
color: silver;
}
%placeholder %placeholder-gold {
color: gold;
}
所以当你这样写:
.myclass {
@extend %placeholder !optional;
}
它只会扩展%placeholder
选择器,而不是%placeholder-gold
选择器。要获得您正在寻找的行为,您必须单独扩展每个占位符选择器:
%placeholder {
color: silver;
@at-root #{&}-gold {
color: gold;
}
}
@mixin placeholder {
& {
@extend %placeholder;
@at-root #{&}-gold {
@extend %placeholder-gold;
}
}
}
.myclass {
@include placeholder;
}
输出:
.myclass {
color: silver;
}
.myclass-gold {
color: gold;
}