gpt4 book ai didi

css - SASS : How to generate a map using a loop

转载 作者:行者123 更新时间:2023-11-28 09:16:46 24 4
gpt4 key购买 nike

我的目标是生成一个 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); }


我希望能够生成的 map 如下所示:

  $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 {}

但是,我天真地认为它可以在 map 内部工作。


可以更容易回答这个疑问的问题:

  • 如何将值添加到 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%)

);

}

);

但是,它返回以下错误:

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 函数。 colourpercentageopacity 需要三个参数。该函数返回一个 map

使用这些参数调用 create_colour_map(#333333, 15%, 0.5) 返回一个 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 中设置值。 map-merge 方法的第二个参数不需要是预定义的 map 变量。也可以这样写

$map: map-merge( $map, (class: blue) );

所以这里看起来就像是向 $map 变量添加一个新的 keyvalue

关于css - SASS : How to generate a map using a loop,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40221097/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com