基于 class 的 Scss 变量
Scss Variable based on class
我正在尝试为我的一个项目做主题,我 是 使用 css 变量。我定义 css 变量如下
.theme-1 {
--var-1: #ffe;
--var-2: #000;
}
.theme-2 {
--var-1: #fff;
--var-2: #000;
}
在 html 中,我按如下方式应用主题
<div [ngClass]="'theme-1'">
<!--content>
<-->
</div>
除 IE -11 之前不支持 css 变量外,一切正常 Here。
问题
有什么方法可以用 scss 变量来实现这个,这样我就可以定义全局变量并根据 class 更改值。
注意:我正在为我的项目使用angular,因此我也不得不担心视图封装。要是能用默认封装就可以得到答案就好了
提前致谢。
我个人更喜欢为此使用函数,但您也可以使用混合来实现它。
创建一个地图,其属性绑定到与您拥有的主题一样多的值。
然后,定义一个自定义 属性 来获取此地图和 return 想要的值。
$theme: (
color: (#000, #FFF),
border: (dashed, solid),
// etc.
);
@function theme($property, $index) {
@return nth(map-get($theme, $property), $index);
}
.light.foo {
color: theme(color, 1);
}
.dark.foo {
color: theme(color, 2);
}
由于SASS是自上而下编译的,您可以为每个主题重新定义变量,并复制常用样式,这些样式将被编译为使用正确的变量值。
_dark-theme.scss
// Variables for dark theme
$background-color: #333;
$color: #fff;
_light-theme.scss
// Variables for light theme
$background-color: #eee;
$text-color: #333;
_common-styles.scss
// Styles used across all themes, uses theme variables
body {
background: $background-color;
color: $text-color;
}
main.scss
.dark-theme {
@import "dark-theme";
@import "common-styles";
}
.light-theme {
@import "light-theme";
@import "common-styles";
}
然后在 html 的顶层使用所需的主题 class。
<body class="dark-theme">
...
</body>
我正在尝试为我的一个项目做主题,我 是 使用 css 变量。我定义 css 变量如下
.theme-1 {
--var-1: #ffe;
--var-2: #000;
}
.theme-2 {
--var-1: #fff;
--var-2: #000;
}
在 html 中,我按如下方式应用主题
<div [ngClass]="'theme-1'">
<!--content>
<-->
</div>
除 IE -11 之前不支持 css 变量外,一切正常 Here。
问题
有什么方法可以用 scss 变量来实现这个,这样我就可以定义全局变量并根据 class 更改值。
注意:我正在为我的项目使用angular,因此我也不得不担心视图封装。要是能用默认封装就可以得到答案就好了
提前致谢。
我个人更喜欢为此使用函数,但您也可以使用混合来实现它。
创建一个地图,其属性绑定到与您拥有的主题一样多的值。
然后,定义一个自定义 属性 来获取此地图和 return 想要的值。
$theme: (
color: (#000, #FFF),
border: (dashed, solid),
// etc.
);
@function theme($property, $index) {
@return nth(map-get($theme, $property), $index);
}
.light.foo {
color: theme(color, 1);
}
.dark.foo {
color: theme(color, 2);
}
由于SASS是自上而下编译的,您可以为每个主题重新定义变量,并复制常用样式,这些样式将被编译为使用正确的变量值。
_dark-theme.scss
// Variables for dark theme
$background-color: #333;
$color: #fff;
_light-theme.scss
// Variables for light theme
$background-color: #eee;
$text-color: #333;
_common-styles.scss
// Styles used across all themes, uses theme variables
body {
background: $background-color;
color: $text-color;
}
main.scss
.dark-theme {
@import "dark-theme";
@import "common-styles";
}
.light-theme {
@import "light-theme";
@import "common-styles";
}
然后在 html 的顶层使用所需的主题 class。
<body class="dark-theme">
...
</body>