在我正在研究的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 */
}
我可以通过在&
类之后使用&:hover
,&:active
,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 */
}
答案 0 :(得分:2)
您可以尝试这样的事情:
$classes: ".bodyClass1" , ".bodyClass2";
.aClass, .anotherClass {
/* some styles */
@for $i from 1 through 2 {
#{nth($classes, $i)} & {
/* Styles under $classes */
}
#{nth($classes, $i)} &:hover {
/* Styles under $classes when hovering */
}
}
}
答案 1 :(得分:2)
这将是另一种在我看来更具可扩展性的方法。因为每次更新变量时都不必编辑for循环中的数字。
$classes: (bodyClass1, bodyClass2);
@each $class in $classes {
.aClass, .anotherClass {
// your styles
.#{$class} & {
// your styles
&:hover {
// your styles
}
}
}
}
关于SassMeister http://sassmeister.com/gist/6edf0319bd4d8462fa95