,如果我在_mixins.scss的混入前添加列表内容它工作正常,但如果让我无法遍地重复使用只需修改列表的内容。
当调用mixin时,由于您在a { ... }
部分中定义了它,因此您的列表超出了范围。为了让列表对你的mixin可见,你必须在外部定义列表(不一定在mixin之前,但至少在你调用mixin之前)。
$path: "../images/";
@mixin dynamic-bg($path, $type, $ext) {
@each $source in $source-list {
&[data-bg="#{$source}"] {
background: url($path + $source + '_' + $type + '.' + $ext) no-repeat;
}
}
}
$source-list: "alpha", "beta", "gamma";
a {
@include dynamic-bg($path, "logo", "png");
}
$source-list: "new1", "new2";
strong {
@include dynamic-bg($path, "logo", "png");
}
编译为:
a[data-bg="alpha"] {
background: url("../images/alpha_logo.png") no-repeat;
}
a[data-bg="beta"] {
background: url("../images/beta_logo.png") no-repeat;
}
a[data-bg="gamma"] {
background: url("../images/gamma_logo.png") no-repeat;
}
strong[data-bg="new1"] {
background: url("../images/new1_logo.png") no-repeat;
}
strong[data-bg="new2"] {
background: url("../images/new2_logo.png") no-repeat;
}
如果你把列表中的a
内部的原因,没有其他的定义应该能够利用它,你最好去额外(可选)混入参数:
@mixin dynamic-bg($path, $type, $ext, $sources: $source-list) {
@each $source in $sources {
&[data-bg="#{$source}"] {
background: url($path + $source + '_' + $type + '.' + $ext) no-repeat;
}
}
}
$source-list: "default-1", "default-2";
a {
$source-list: "alpha", "beta", "gamma";
@include dynamic-bg($path, "logo", "png", $source-list);
}
strong {
@include dynamic-bg($path, "logo", "png");
}
编译为:
a[data-bg="alpha"] {
background: url("../images/alpha_logo.png") no-repeat;
}
a[data-bg="beta"] {
/* ... */
strong[data-bg="default-1"] {
background: url("../images/default-1_logo.png") no-repeat;
}
strong[data-bg="default-2"] {
/* ... */
或者仅仅是想用所需的参数下面并没有额外$source-list
变量:
@mixin dynamic-bg($path, $type, $ext, $source-list) {
@each $source in $source-list {
&[data-bg="#{$source}"] {
background: url($path + $source + '_' + $type + '.' + $ext) no-repeat;
}
}
}
a {
@include dynamic-bg($path, "logo", "png", ("alpha", "beta", "gamma"));
}
strong {
@include dynamic-bg($path, "logo", "png", ("strong-1", "strong-2"));
}
我不知道,我必须定义之外,我叫混入名单。它改变了一切:) 我刚刚重写了我的mixin(在我看到你的答案之前),我终于使用了一个** Arglist **(我现在不知道)。 它看起来有点像你上面做的: $ targets-list:“alpha”,“beta”,“gamma”; @include dynamic-bg($ path,“icon”,“png”,$ targets-list ...); 如果我猜得好,“$ targets-list ...”最适合*'unlimited'列表*和“$ targets-list”适用于*'限定列表'*? 谢谢你的回答,我真的赞赏它! –
[这篇文章](https://www.sitepoint.com/sass-multiple-arguments-lists-or-arglist/)解释arglists相当不错:) – Marvin
是的,这是我找到的这一个! –