不。直到到达末尾的分号时才定义映射。因此在此之前您无法引用其中的任何部分。
$base-color: #A4EDE1;
$colors: (
green: (
light: $base-color,
mid: darken($base-color, 20%),
dark: darken($base-color, 40%)
),
);
$colors: map-merge($colors, (
red: (
light: complement(get-color(green, light)),
mid: complement(get-color(green, mid)),
dark: complement(get-color(green, dark))
)));
.foo {
color: get-color(red, mid);
}
除非你循环映射,否则我建议not使用映射来存储颜色变量。相反,最好简单地编写一个函数来为您进行操作:
$base-color: #A4EDE1;
@function get-color($lightness, $variation: null, $color: $base-color) {
$color: if($variation, call($variation, $color), $color);
@if $lightness == medium {
@return darken($color, 20%);
} @else if $lightness == dark {
@return darken($color, 40%);
}
@return $color;
}
.foo {
color: get-color(mid);
border: 1px solid get-color(mid, complement);
}