根据变量动态生成CSS类-SCSS
Generate CSS classes dynamically based on variables - SCSS
我有颜色变量(示例):
// _colors.scss
:root, * {
--color-primary-50: 1,1,1;
--color-primary-100: 2,2,2;
--color-primary-200: 3,3,3;
}
我想根据变量生成类,例如:
// _background.scss
.bg-primary-50 {
background: rgb(var(--color-primary-50));
}
.bg-primary-100 {
background: rgb(var(--color-primary-100));
}
.bg-primary-200 {
background: rgb(var(--color-primary-200));
}
如果我需要更改或添加新颜色并根据 _colors
变量使用 类 动态填充我的 _background
文件,我想简化我未来的修改。
看起来工作单调很多。有什么办法可以得到这个结果吗?也许我应该更改我的文件结构?
使用@each
循环。而不是在 :root
中创建 vars
,而是在单个 var
中添加它们(参见下面的示例)
$colors : (
"primary-50": "1,1,1",
"primary-100": "2,2,2",
"primary-200": "3,3,3",
);
@each $color, $value in $colors {
.bg-#{$color} {
background-color: rgb($value);
}
}
以上代码编译成
.bg-primary-50 {
background-color: #010101;
}
.bg-primary-100 {
background-color: #020202;
}
.bg-primary-200 {
background-color: #030303;
}
而 CSS --variables
:root {
@each $color, $value in $colors {
--color-#{$color}: rgb($value);
}
}
你有 CSS 个变量
:root {
--color-primary-50: #010101;
--color-primary-100: #020202;
--color-primary-200: #030303;
}
正如您在评论中提到的“此解决方案适用于明暗模式吗?”为此你可以做这样的事情
html[data-color-mode="dark"] {
$dark-mode-colors: (
"primary-color-50": "0, 0, 0",
"primary-color-100": "1, 1, 1",
"primary-color-200": "2, 2, 2",
)
@each $color, $value in $colors {
.bg-#{$color} {
background-color: $value;
}
}
}
// change your color scheme as you prefer method will remain the same
html[data-color-mode="light"] {
$light-mode-colors: (
"primary-color-50": "0, 0, 0",
"primary-color-100": "1, 1, 1",
"primary-color-200": "2, 2, 2",
)
@each $color, $value in $colors {
.bg-#{$color} {
background-color: $value;
}
}
}
我有颜色变量(示例):
// _colors.scss
:root, * {
--color-primary-50: 1,1,1;
--color-primary-100: 2,2,2;
--color-primary-200: 3,3,3;
}
我想根据变量生成类,例如:
// _background.scss
.bg-primary-50 {
background: rgb(var(--color-primary-50));
}
.bg-primary-100 {
background: rgb(var(--color-primary-100));
}
.bg-primary-200 {
background: rgb(var(--color-primary-200));
}
如果我需要更改或添加新颜色并根据 _colors
变量使用 类 动态填充我的 _background
文件,我想简化我未来的修改。
看起来工作单调很多。有什么办法可以得到这个结果吗?也许我应该更改我的文件结构?
使用@each
循环。而不是在 :root
中创建 vars
,而是在单个 var
中添加它们(参见下面的示例)
$colors : (
"primary-50": "1,1,1",
"primary-100": "2,2,2",
"primary-200": "3,3,3",
);
@each $color, $value in $colors {
.bg-#{$color} {
background-color: rgb($value);
}
}
以上代码编译成
.bg-primary-50 {
background-color: #010101;
}
.bg-primary-100 {
background-color: #020202;
}
.bg-primary-200 {
background-color: #030303;
}
而 CSS --variables
:root {
@each $color, $value in $colors {
--color-#{$color}: rgb($value);
}
}
你有 CSS 个变量
:root {
--color-primary-50: #010101;
--color-primary-100: #020202;
--color-primary-200: #030303;
}
正如您在评论中提到的“此解决方案适用于明暗模式吗?”为此你可以做这样的事情
html[data-color-mode="dark"] {
$dark-mode-colors: (
"primary-color-50": "0, 0, 0",
"primary-color-100": "1, 1, 1",
"primary-color-200": "2, 2, 2",
)
@each $color, $value in $colors {
.bg-#{$color} {
background-color: $value;
}
}
}
// change your color scheme as you prefer method will remain the same
html[data-color-mode="light"] {
$light-mode-colors: (
"primary-color-50": "0, 0, 0",
"primary-color-100": "1, 1, 1",
"primary-color-200": "2, 2, 2",
)
@each $color, $value in $colors {
.bg-#{$color} {
background-color: $value;
}
}
}