我在理解SCSS变量参数方面有困难。 如here所示,您可以添加多个参数很容易理解。
但是我不知道如何使用Google地图。
例如:
我有这张地图:
$spacing: (
none: 0px,
micro: 2px,
tiny: 4px,
);
然后我写了一个控制间距的函数: (很可能是超级错误的)
@function spacing($value...) {
$chosen-spacing: null;
@if length($value) == 1 {
@if map-has-key($spacing, $value) {
@return map-get($spacing, $value);
}@else {
@error "'#{$value}' doesn't exist in 'spacing map'";
@return null;
}
}@else {
@each $v in $value {
@if map-has-key($spacing, $value) {
$chosen-spacing: map-get($spacing, $value);
}@else {
@error "'#{$value}' doesn't exist in 'spacing map'";
@return null;
}
}
@return $chosen-spacing;
}
}
我想要的是能够将函数调用为:
.blabla {
padding: spacing(none);
margin: spacing (micro, tiny);
}
输出为:
.blabla {
padding: 0px;
margin: 2px 4px;
}
没有Map,就可以轻松完成,但是有了Map,我该怎么办呢?
谢谢
答案 0 :(得分:3)
您可以在单个循环中使用append
。
$spacing: (
none: 0px,
micro: 2px,
tiny: 4px,
);
@function spacing($value...) {
$chosen-spacing: null;
@each $v in $value {
@if map-has-key($spacing, $v) {
$chosen-spacing: append($chosen-spacing , map-get($spacing, $v));
}@else {
@error "'#{$value}' doesn't exist in 'spacing map'";
@return null;
}
}
@return $chosen-spacing;
}
.blabla {
padding: spacing(none);
margin: spacing(micro, tiny);
}
这是输出:
.blabla {
padding: 0px;
margin: 2px 4px;
}
答案 1 :(得分:1)
这是您的操作方法:
@function spacing($value...) {
$chosen-spacing: null;
@each $v in $value {
@if($chosen-spacing) {
$chosen-spacing: #{$chosen-spacing + ' '}
};
@if map-has-key($spacing, $v) {
$chosen-spacing: #{$chosen-spacing + map-get($spacing, $v)};
} @else {
@error "'#{$v}' doesn't exist in 'spacing map'";
@return null;
}
}
@return $chosen-spacing;
}
您不需要检查长度,一个简单的循环就足够了。
循环将读取每个参数,并将从映射获得的值添加到$chosen-spacing
变量中。第一次@if
检查变量是否已经有值,如果是这种情况,则意味着我们需要在添加下一个值之前添加一个空格(这样我们就不会得到2px4px
)。>