我有 colored颜色 变量(示例):


// _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));
}

如果我需要更改或添加新 colored颜色 ,并使用基于_colors个变量的类动态填充我的_background文件,我想简化我future 的修改.

这似乎是很多单调的工作.有没有办法得到这个结果?也许我应该改变我的文件 struct ?

推荐答案

使用@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;
}

就像你在 comments 中提到的"这个解决方案适用于明暗模式吗?"为此,你可以这样做

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;
    }
  }
}

Css相关问答推荐

在react native中应用阴影

Css扩展搜索栏,如何添加图标结束?

如何在CSS中实现边框的局部透明?

在css网格中用一个锚标签(顶部/底部边距)包装图像?

当具有外部高度的网格项溢出时,为什么溢出滚动端口填充不应用于网格容器?

在GRID-TEMPLATE-ROWS中设置最大行数:Repeat()

Prettier/VS Code 在 CSS 中的 !important 之前添加一个空格,导致它在 WordPress 中崩溃

为什么我的 React slick 轮播响应能力不起作用?

用css重复表格边框

无法更改 div 内链接的悬停 colored颜色

页脚上方的图像分隔线使用 ::before 伪元素

如何制作一个div来包装两个浮动div?

svg 背景图像位置始终在 Internet Explorer 中居中,尽管 background-position: left center;

纯 CSS 滚动动画

悬停时如何在图像上显示文字?

跨浏览器方法使子 div 适合其父级的宽度

如何停止 setTimeout 循环?

如何使 window.scrollTo() 效果平滑

将 webkit 滚动条样式应用于指定元素

更改 html 列表中项目符号的 colored颜色 ?