for循环中的动态函数参数
Dynamic function parameter in for loop
我试图通过调用从地图获取颜色的函数在 for 循环中生成 CSS 变量。
我创建了一个带有颜色的地图,如下所示:
$shade-colors: (
100: #1A1A1A,
200: #2E2E2E,
300: #495057,
400: #6c757d,
500: #adb5bd,
600: #cccccc,
700: #dee2e6,
800: #e9ecef,
900: #ececec
);
要从此地图(和其他地图)获取颜色,我正在使用此函数:
@function color($cat, $color, $shade: base) {
@if ($cat == 'theme') {
@return map-get($theme-colors, $color, $shade);
}
@else if ($cat == 'shade') {
@return map-get($shade-colors, $color);
}
@else {
@return map-get($cat, $color, $shade);
}
}
我想通过 for 循环从 $shade-colors 映射中动态生成 CSS 变量,如下所示:
@for $i from 1 through 9 {
$i: #{$i}00;
$val: color('shade', #{$i});
--color-shade-#{$i}: #{$val};
}
出于某种原因,我无法让它工作。问题出现在函数调用的第二个参数中。使用静态值可以,但它不能像我预期的那样使用动态生成的 100 到 900。这是代表这个问题的笔:
https://codepen.io/ikmaakt/pen/KKvqMMg
一种方法是直接遍历 map 而不是使用一些相当复杂的逻辑来构建名称和获取值的单独 for 循环
通过迭代生成变量的示例 $shade-colors
:
:root {
@each $name, $color in $shade-colors {
--color-shade-#{$name}: #{$color};
}
如果你真的想按照自己的方式去做,我建议创建一个数组并使用 @each
:
对其进行迭代
$weights: 100, 200, 300, 400, 500, 600, 700, 800, 900;
:root {
@each $weight in $weights {
--color-shade-#{$weight}: color('shade', #{#{$weight});
}
}
我试图通过调用从地图获取颜色的函数在 for 循环中生成 CSS 变量。 我创建了一个带有颜色的地图,如下所示:
$shade-colors: (
100: #1A1A1A,
200: #2E2E2E,
300: #495057,
400: #6c757d,
500: #adb5bd,
600: #cccccc,
700: #dee2e6,
800: #e9ecef,
900: #ececec
);
要从此地图(和其他地图)获取颜色,我正在使用此函数:
@function color($cat, $color, $shade: base) {
@if ($cat == 'theme') {
@return map-get($theme-colors, $color, $shade);
}
@else if ($cat == 'shade') {
@return map-get($shade-colors, $color);
}
@else {
@return map-get($cat, $color, $shade);
}
}
我想通过 for 循环从 $shade-colors 映射中动态生成 CSS 变量,如下所示:
@for $i from 1 through 9 {
$i: #{$i}00;
$val: color('shade', #{$i});
--color-shade-#{$i}: #{$val};
}
出于某种原因,我无法让它工作。问题出现在函数调用的第二个参数中。使用静态值可以,但它不能像我预期的那样使用动态生成的 100 到 900。这是代表这个问题的笔: https://codepen.io/ikmaakt/pen/KKvqMMg
一种方法是直接遍历 map 而不是使用一些相当复杂的逻辑来构建名称和获取值的单独 for 循环
通过迭代生成变量的示例 $shade-colors
:
:root {
@each $name, $color in $shade-colors {
--color-shade-#{$name}: #{$color};
}
如果你真的想按照自己的方式去做,我建议创建一个数组并使用 @each
:
$weights: 100, 200, 300, 400, 500, 600, 700, 800, 900;
:root {
@each $weight in $weights {
--color-shade-#{$weight}: color('shade', #{#{$weight});
}
}