【发布时间】:2014-07-31 22:44:57
【问题描述】:
在我正在处理的 Sass 工作表中,我希望能够在变量中存储一些 body 类,并在嵌套在选择器内的选择器中使用它们以获取某些元素,如下所示:
$classes: ".bodyClass1, .bodyClass2";
.aClass, .anotherClass {
/* some styles */
#{$classes} & {
/* Styles under $classes */
}
#{$classes} &:hover {
/* Styles under $classes when hovering */
}
}
我正在寻找的输出是:
.aClass, .anotherClass {
/* some styles */
}
.bodyClass1 .aClass, .bodyClass2 .aClass, .bodyClass1 .anotherClass, .bodyClass2 .anotherClass {
/* Styles under $classes */
}
.bodyClass1 .aClass:hover, .bodyClass2 .aClass:hover, .bodyClass1 .anotherClass:hover, .bodyClass2 .anotherClass:hover {
/* Styles under $classes when hovering */
}
但它呈现为:
.aClass, .anotherClass {
/* some styles */
}
.aClass .bodyClass1, .bodyClass2 .aClass, .anotherClass .bodyClass1, .bodyClass2 .anotherClass {
/* Styles under $classes */
}
.aClass .bodyClass1, .bodyClass2 .aClass:hover, .anotherClass .bodyClass1, .bodyClass2 .anotherClass:hover {
/* Styles under $classes when hovering */
}
我可以通过在 body 类之后创建单独的变量来解决此问题正在尝试使用它们。
编辑:
srekoble 使用循环的解决方案非常适合我!我将它改编成一个函数,如果其他人可能想要使用它:
$classes: ".bodyClass1", ".bodyClass2";
@function c($classes, $append: null){
$processedClasses: "";
$length: length($classes);
@for $i from 1 through $length {
@if $append {
$processedClasses: #{$processedClasses}#{nth($classes, $i)} #{$append}#{", "};
} @else {
$processedClasses: #{$processedClasses}#{nth($classes, $i)}#{", "};
}
}
@return $processedClasses;
}
.aClass, .anotherClass {
/* some styles */
#{c($classes, "&")} {
/* Styles under $classes */
}
#{c($classes, "&:hover")} {
/* Styles under $classes when hovering */
}
}
输出如下:
.aClass, .anotherClass {
/* some styles */
}
.bodyClass1 .aClass, .bodyClass2 .aClass, .bodyClass1 .anotherClass, .bodyClass2 .anotherClass {
/* Styles under $classes */
}
.bodyClass1 .aClass:hover, .bodyClass2 .aClass:hover, .bodyClass1 .anotherClass:hover, .bodyClass2 .anotherClass:hover {
/* Styles under $classes when hovering */
}
【问题讨论】:
-
实际输出是……真的很奇怪。
标签: css sass css-selectors ampersand