SASS : 如何使用循环生成地图
SASS : How to generate a map using a loop
我的目标是生成一个 SASS map
来存储存储在以下映射中的颜色变体:
$colors : (
jet : #333333,
wintergreen-dream : #588C73,
eton-blue : #8FC0A9,
sunglow : #FFC33C,
light-kaki : #F2E394,
bege : #FAF3DD
);
到目前为止,我正在使用 @function
检索这些变体:
@function light ($color, $val) { @return lighten($color, $val); }
@function dark ($color, $val) { @return darken($color, $val); }
@function transparent ($color, $val) { @return transparent($color, $val); }
我希望能够生成的地图如下所示:
$colors-map : (
eton-blue : (
base : $eton-blue,
light : lighten($eton-blue, 15%),
dark : darken($eton-blue, 15%),
trans : transparent($eton-blue, .5)
),
jet : (
base : $jet,
light : lighten($jet, 15%),
dark : darken($jet, 15%),
trans : transparent($jet, .5)
)
// ...
);
然而,我已经尝试应用的循环看起来像这样:
@for $key, $value in $colors {}
然而,我天真地认为它可以在地图内部工作。
回答这个问题更容易回答的问题 :
- 如何将值添加到 SASS 映射(函数),(键:值)?
map-merge
/map-set
的基本用法? (@return map-merge($map, $new)
)
下面正是我要查找的内容:
$alternative-colors : (
@each $color, $hex in $colors {
#{$color} : (
light : lighten($color, 25%),
dark : darken($color, 25%)
);
}
);
但是,它 returns 出现以下错误:
Error: Invalid CSS after \"...tive-colors : (\": expected \")\", was \"@each (...)
结论
好久不见了,如果能把我的解决方法分享给大家就好了。
我已经创建了一个存储库来存储这个问题解决的结果,https://github.com/vladimirlisovets/SASS-Color-Palettes。
希望它对某人有用,可以激发更好的灵感。
干杯。
$colors : (
jet : #333333,
wintergreen-dream : #588C73,
eton-blue : #8FC0A9,
sunglow : #FFC33C,
light-kaki : #F2E394,
bege : #FAF3DD
);
$colors-map: ();
@function create_colour_map($color, $percentage, $opacity) {
$map: (
base: $color,
light: lighten($color, $percentage),
dark: darken($color, $percentage),
trans: transparentize($color, $opacity)
);
@return $map;
}
@each $key, $value in $colors {
$map: ();
$map: map-merge($map, ($key: create_colour_map($value, 15%, 0.5)) );
$colors-map: map-merge($colors-map, $map);
}
@debug $colors-map; //prints out the map below
(jet: (base: #333333,
light: #595959,
dark: #0d0d0d,
trans: rgba(51, 51, 51, 0.5)),
wintergreen-dream: (base: #588C73,
light: #81b099,
dark: #3a5d4c,
trans: rgba(88, 140, 115, 0.5)),
eton-blue: (base: #8FC0A9,
light: #c0dccf,
dark: #5ea483,
trans: rgba(143, 192, 169, 0.5)),
sunglow: (base: #FFC33C,
light: #ffdb89,
dark: #efa500,
trans: rgba(255, 195, 60, 0.5)),
light-kaki: (base: #F2E394,
light: #faf5d8,
dark: #ead150,
trans: rgba(242, 227, 148, 0.5)),
bege: (base: #FAF3DD,
light: white,
dark: #f0db9a,
trans: rgba(250, 243, 221, 0.5)))
我把你的三个功能合二为一,create_colour_map
功能。 colour
、percentage
和 opacity
需要三个参数。函数returns一个map
用这些参数调用 create_colour_map(#333333, 15%, 0.5)
returns a map
(base: #333333,
light: #595959,
dark: #0d0d0d,
trans: rgba(51, 51, 51, 0.5)
);
我只是循环遍历 $colors
地图,每次调用生成地图的函数,每次迭代都会成为键的值。
How to add values to a map and basic usage of map-merge?
我使用 map-merge
将值添加到 map
。顾名思义,它将两个映射连接在一起,因为它是一个函数,所以可以在 Sass 需要 值 的地方使用。所以以下面的代码为例
$map: ( colour: red);
$new_map: (class: blue);
如果我们希望 $map
具有与两个映射相同的键和值,我们可以编写
$map: map-merge( $map, $new_map); // $map: (colour: red, class: blue)
这基本上是说函数的 return
值(将两个映射连接在一起)是 $map
的值
简单的说就是把那行代码想象成编程语言中的变量重赋值。这就是您如何使用 map-merge
在地图中设置值。 map-merge
方法的第二个参数不需要是预定义的映射变量。本来可以这样写的
$map: map-merge( $map, (class: blue) );
所以这里看起来您正在向 $map
变量
添加新的 key
和 value
$font-sizes: (); // creating empty map variable
@for $i from 10 to 141 {
$font-sizes: map-merge(
$map1: $font-sizes,
$map2: (
$i: $i * 0.0625+"rem",
),
);
}
// for printing in console
@debug $font-sizes;
从 10 循环到 141 并合并到之前定义的变量中
我的目标是生成一个 SASS map
来存储存储在以下映射中的颜色变体:
$colors : (
jet : #333333,
wintergreen-dream : #588C73,
eton-blue : #8FC0A9,
sunglow : #FFC33C,
light-kaki : #F2E394,
bege : #FAF3DD
);
到目前为止,我正在使用 @function
检索这些变体:
@function light ($color, $val) { @return lighten($color, $val); }
@function dark ($color, $val) { @return darken($color, $val); }
@function transparent ($color, $val) { @return transparent($color, $val); }
我希望能够生成的地图如下所示:
$colors-map : (
eton-blue : (
base : $eton-blue,
light : lighten($eton-blue, 15%),
dark : darken($eton-blue, 15%),
trans : transparent($eton-blue, .5)
),
jet : (
base : $jet,
light : lighten($jet, 15%),
dark : darken($jet, 15%),
trans : transparent($jet, .5)
)
// ...
);
然而,我已经尝试应用的循环看起来像这样:
@for $key, $value in $colors {}
然而,我天真地认为它可以在地图内部工作。
回答这个问题更容易回答的问题 :
- 如何将值添加到 SASS 映射(函数),(键:值)?
map-merge
/map-set
的基本用法? (@return map-merge($map, $new)
)
下面正是我要查找的内容:
$alternative-colors : (
@each $color, $hex in $colors {
#{$color} : (
light : lighten($color, 25%),
dark : darken($color, 25%)
);
}
);
但是,它 returns 出现以下错误:
Error: Invalid CSS after \"...tive-colors : (\": expected \")\", was \"@each (...)
结论
好久不见了,如果能把我的解决方法分享给大家就好了。
我已经创建了一个存储库来存储这个问题解决的结果,https://github.com/vladimirlisovets/SASS-Color-Palettes。
希望它对某人有用,可以激发更好的灵感。
干杯。
$colors : (
jet : #333333,
wintergreen-dream : #588C73,
eton-blue : #8FC0A9,
sunglow : #FFC33C,
light-kaki : #F2E394,
bege : #FAF3DD
);
$colors-map: ();
@function create_colour_map($color, $percentage, $opacity) {
$map: (
base: $color,
light: lighten($color, $percentage),
dark: darken($color, $percentage),
trans: transparentize($color, $opacity)
);
@return $map;
}
@each $key, $value in $colors {
$map: ();
$map: map-merge($map, ($key: create_colour_map($value, 15%, 0.5)) );
$colors-map: map-merge($colors-map, $map);
}
@debug $colors-map; //prints out the map below
(jet: (base: #333333,
light: #595959,
dark: #0d0d0d,
trans: rgba(51, 51, 51, 0.5)),
wintergreen-dream: (base: #588C73,
light: #81b099,
dark: #3a5d4c,
trans: rgba(88, 140, 115, 0.5)),
eton-blue: (base: #8FC0A9,
light: #c0dccf,
dark: #5ea483,
trans: rgba(143, 192, 169, 0.5)),
sunglow: (base: #FFC33C,
light: #ffdb89,
dark: #efa500,
trans: rgba(255, 195, 60, 0.5)),
light-kaki: (base: #F2E394,
light: #faf5d8,
dark: #ead150,
trans: rgba(242, 227, 148, 0.5)),
bege: (base: #FAF3DD,
light: white,
dark: #f0db9a,
trans: rgba(250, 243, 221, 0.5)))
我把你的三个功能合二为一,create_colour_map
功能。 colour
、percentage
和 opacity
需要三个参数。函数returns一个map
用这些参数调用 create_colour_map(#333333, 15%, 0.5)
returns a map
(base: #333333,
light: #595959,
dark: #0d0d0d,
trans: rgba(51, 51, 51, 0.5)
);
我只是循环遍历 $colors
地图,每次调用生成地图的函数,每次迭代都会成为键的值。
How to add values to a map and basic usage of map-merge?
我使用 map-merge
将值添加到 map
。顾名思义,它将两个映射连接在一起,因为它是一个函数,所以可以在 Sass 需要 值 的地方使用。所以以下面的代码为例
$map: ( colour: red);
$new_map: (class: blue);
如果我们希望 $map
具有与两个映射相同的键和值,我们可以编写
$map: map-merge( $map, $new_map); // $map: (colour: red, class: blue)
这基本上是说函数的 return
值(将两个映射连接在一起)是 $map
简单的说就是把那行代码想象成编程语言中的变量重赋值。这就是您如何使用 map-merge
在地图中设置值。 map-merge
方法的第二个参数不需要是预定义的映射变量。本来可以这样写的
$map: map-merge( $map, (class: blue) );
所以这里看起来您正在向 $map
变量
key
和 value
$font-sizes: (); // creating empty map variable
@for $i from 10 to 141 {
$font-sizes: map-merge(
$map1: $font-sizes,
$map2: (
$i: $i * 0.0625+"rem",
),
);
}
// for printing in console
@debug $font-sizes;
从 10 循环到 141 并合并到之前定义的变量中