,如果我在_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
是的,這是我找到的這一個! –