【发布时间】:2021-06-17 21:54:00
【问题描述】:
我正在尝试在我的项目中自定义 scss,以便我可以根据应用于最外层元素的 css 选择器来使用 css 变量。 我的基本思路是定义颜色变量,然后使用这些颜色变量在两个不同的 css 选择器中定义语义颜色变量。
$primary: orange;
$primary-dark: redorange;
$warn: red;
$accent: grey;
$dark-grey: #757678;
$light-grey: #f7f7f7;
$error-text: $warn;
.light {
$background: $light-grey;
$button-bg: $primary;
}
.dark {
$background: $dark-grey;
$button-bg: $primary-dark;
}
这是我尝试过的一种解决方案,但在 scss 中我们无法根据选择器更改变量的范围。
所以我尝试使用函数。
$white: #fff;
$light-grey: #eaeaea
$primry-dark: redorange;
$primary: orange;
$black: #000;
$semantic-colors: (
background: (
screen: $white,
tile: $light-grey,
),
buttons: (
primary: $primary
link: $white
icons: $primary-dark;
)
);
@function semantic-color($semantic-color:'background', $tone: "base") {
// @return red;
@return map-get(map-get($semantic-colors, $semantic-color), $tone);
}
.side-nav-link {
background-color: semantic-color(background, tile);
}
上面的代码工作正常。但我想要一个基于主题的颜色图。例如: dark 有自己的语义颜色图,light 有自己的,我可以根据范围访问。
.light {
$semantic-colors: (
background: (
base: $white,
tile: $light-grey,
),
buttons: (
primary: $primary,
link: $white,
icons: $primary-dark;
)
);
}
.dark {
$semantic-colors: (
background: (
base: $black,
tile: $dark-grey,
),
buttons: (
primary: $primary-dark,
link: $black,
icons: $primary;
)
);
}
我可以在语义颜色映射中创建两个不同的映射:
$semantic-colors: (
light:(
background: (
base: $white,
tile: $light-grey,
),
buttons: (
primary: $primary
link: $white
icons: $primary-dark;
)
),
dark:(
background: (
base: $black,
tile: $dark-grey,
),
buttons: (
primary: $primary-dark,
link: $black,
icons: $primary;
)
)
);
然后修改我的函数以根据 $theme 变量在特定地图中获取颜色。
例如:
$theme: dark;
@function semantic-color($semantic-color:'background', $tone: "base") {
// @return red;
@return map-get(map-get(map-get($semantic-colors, $theme), $semantic-color), $tone);
}
但我不知道如何根据 .light 和 .dark 选择器定义 $theme。
如果我尝试做这样的事情:
.light {
$theme: light;
}
.dark {
$theme: dark;
}
然后在语义颜色函数中使用 $theme 变量然后我得到错误 $theme is not defined.
所以我的问题是
“有没有一种方法可以根据 CSS 选择器(在我的情况下为 .light 或 .dark)定义 $theme 或语义颜色函数或 $sematic-color 映射?” p>
我已阅读 sass 文档,但找不到适合我情况的解决方案。
我参考的文章:
Creating a Color Language in Web Interfaces (with Sass Maps)
【问题讨论】:
-
@Alwasalearner:感谢您对我的回答的反馈。所以我没有得到问题/想法确实不是正确的方法。也许您想更集中/澄清您的问题。
-
嗨@Brebber,我正在尝试更改scss 变量的范围,就像我们在css 变量中所做的那样,以便我可以使用浅色或深色主题。这是一篇文章,它提出了一种方法,但我无法理解这个解决方案medium.com/@dmitriy.borodiy/…
标签: css sass scss-mixins scss-functions