css変数に色を格納する時はRGB値も入れればOKという話
下記の記述は意図した結果になりません。
--color_red: #f00;
.red{
// rgba(#f00, 0.5) と書いたのと同じなので反映されない
color: rgba(var(--color_red), 0.5);
}
下記は透明度50%の赤になります。
--rgb_red: 255, 0, 0;
.red{
color: rgba(var(--rgb_red), 0.5);
}
root に色の変数を格納しよう
こんな感じに色の一覧を作っておきます。
$colors:(
red:(
base: #f00,
light: #f33,
dark: #c00
),
blue:(
base: #00f,
light: #33f,
dark: #00c
)
);
:root に色の変数を書き出します。
@use "sass:color";
:root{
@each $name, $color in $colors) {
@each $type, $code in $color {
@if $type == "base" {
--root-color_#{""+$name}: #{$code};
--root-rgb_#{""+$name}: #{color.red($code)}, #{color.green($code)}, #{color.blue($code)};
} @else {
--root-color_#{""+$name}-#{$type}: #{$code};
--root-rgb_#{""+$name}-#{$type}: #{color.red($code)}, #{color.green($code)}, #{color.blue($code)};
}
}
}
}
出力結果。
:root{
--root-color_red: #f00;
--root-rgb_red: 255, 0, 0;
--root-color_red-light: #f33;
--root-rgb_red-light: 255, 51, 51;
/* ...省略 */
}
dart-sass での方法です。
lib-sass では使えません。