我正在尝试生成一个自动系统来定义SASS中的颜色。
我有一张名为$品牌颜色的颜色地图,我希望这张地图的颜色能在第二张地图中生成颜色和色调,不管有多少种颜色在$品牌颜色中。
这就是我到达的地方:
$brand-colors: (
brand-color: (
primary-color: #0096d6,
secondary-color: #1a4760,
),
) !default;
@function generate-map($map) {
@each $item, $colors in $map {
@each $color-name, $value in $colors {
@return(
$color-name: (
light-30: mix(white, $value, 30%),
light-20: mix(white, $value, 20%),
light-10: mix(white, $value, 10%),
base: $value,
dark-10: mix(black, $value, 10%),
dark-20: mix(black, $value, 20%),
dark-30: mix(black, $value, 30%),
),
);
};
};
};
$brand-palette: (
brand-palette:(
generate-map($_new-brand-colors)
),
) !default;使用上面的代码,我从终端得到以下结果:
brand-palette:(
primary-color:(
light-30: #4db6e2,
light-20: #33abde,
light-10: #1aa1da,
base: #0096d6,
dark-10: #0087c1,
dark-20: #0078ab,
dark-30: #006996
)
)总之,只取了第一个键值对,我不明白为什么.有人能给我一个答案吗?
发布于 2018-01-30 22:12:01
函数和返回语句
@return语句告诉函数停止一切,返回值。
@function myFunction() {
@each $item in [a, b, c, d] {
@return $item;
}
}myFunction()只返回a。尽管我们有一个包含四个项的循环,但它将只运行一次(第一次),因为它会立即命中@return语句。
在功能结束时返回一次的最佳实践
函数的一个最佳实践是拥有一个$result变量,并且只在函数的端调用@return $result一次。
@function myFunctionFixed() {
$result;
@each $item in [a, b, c, d] {
$result: $result + a;
}
@return $result;
}myFunctionFixed()将返回abcd,因为我们允许循环从头到尾运行,而无需与@return进行交互,并且只在循环完成后才返回函数的末尾。
使用map-merge增量构建映射
应用上面描述的最佳实践,我们可以将@return语句移到函数的末尾,并使用map-merge逐步构建$result-map变量。
@function generate-map($map) {
$result-map: () !default;
@each $item, $colors in $map {
@each $color-name, $value in $colors {
$result-map: map-merge($result-map,
($color-name: (
light-30: mix(white, $value, 30%),
light-20: mix(white, $value, 20%),
light-10: mix(white, $value, 10%),
base: $value,
dark-10: mix(black, $value, 10%),
dark-20: mix(black, $value, 20%),
dark-30: mix(black, $value, 30%),
))
);
};
};
@return $result-map;
};https://stackoverflow.com/questions/48520177
复制相似问题