将多个参数传递给单个 mixin 参数
Pass multiple arguments to single mixin argument
我知道可以将多个参数传递给混合函数。像这样:
@mixin exampleOne($font-family, $primary-color){
.address {
font-family: $font-family;
color: $primary-color;
}
}
不过,我想实现这样的事情
@mixin exampleTwo($font-family, $primary-color...){
.address {
font-family: $font-family;
color: $primary-color;
}
}
所以它会编译:
@include exampleTwo('Avenir', Red, font-weight: 600, text-transform: upperscase)
收件人:
.address {
font-family: 'Avenir';
color: red;
font-weight: 600;
text-transform: uppercase;
}
我想我的问题是,"Is it possible to pass extra arguments to a mixin, when that mixin has not yet defined those arguments. Just for extendibility. I don't think it's possible to pass an actual "反对“混合参数”。如果你可以,那将回答我的问题。
希望这是有道理的。
提前致谢!
在这种情况下最好的做法是使用 map 来保存 property/value 对,例如:
(font-weight: 600, text-transform: uppercase)
然后你可以添加一个参数来保存 mixin 中的映射:
@mixin fonts($font-family, $primary-color, $styles){
然后遍历地图,将样式插入规则中:
@each $property, $value in $styles {
#{$property}: $value;
}
总而言之:
@mixin fonts($font-family, $primary-color, $styles){
.address {
font-family: $font-family;
color: $primary-color;
//Loop through styles map
@each $property, $value in $styles {
#{$property}: $value;
}
}
}
你会这样称呼它:
@include exampleTwo('Avenir', Red, (font-weight: 600, text-transform: uppercase));
这将输出:
.address {
font-family: "Avenir";
color: Red;
font-weight: 600;
text-transform: uppercase;
}
我知道可以将多个参数传递给混合函数。像这样:
@mixin exampleOne($font-family, $primary-color){
.address {
font-family: $font-family;
color: $primary-color;
}
}
不过,我想实现这样的事情
@mixin exampleTwo($font-family, $primary-color...){
.address {
font-family: $font-family;
color: $primary-color;
}
}
所以它会编译:
@include exampleTwo('Avenir', Red, font-weight: 600, text-transform: upperscase)
收件人:
.address {
font-family: 'Avenir';
color: red;
font-weight: 600;
text-transform: uppercase;
}
我想我的问题是,"Is it possible to pass extra arguments to a mixin, when that mixin has not yet defined those arguments. Just for extendibility. I don't think it's possible to pass an actual "反对“混合参数”。如果你可以,那将回答我的问题。
希望这是有道理的。 提前致谢!
在这种情况下最好的做法是使用 map 来保存 property/value 对,例如:
(font-weight: 600, text-transform: uppercase)
然后你可以添加一个参数来保存 mixin 中的映射:
@mixin fonts($font-family, $primary-color, $styles){
然后遍历地图,将样式插入规则中:
@each $property, $value in $styles {
#{$property}: $value;
}
总而言之:
@mixin fonts($font-family, $primary-color, $styles){
.address {
font-family: $font-family;
color: $primary-color;
//Loop through styles map
@each $property, $value in $styles {
#{$property}: $value;
}
}
}
你会这样称呼它:
@include exampleTwo('Avenir', Red, (font-weight: 600, text-transform: uppercase));
这将输出:
.address {
font-family: "Avenir";
color: Red;
font-weight: 600;
text-transform: uppercase;
}