我在scss文件中定义了不同的变量,我在一些scss文件中使用了这些变量。
_variables.scss
$light-theme: rgba(94,161,215,0.3);
$dark-theme: #5EA1D7;
$darker-theme: #57647A;
$very-dark-theme: #455061;
如何定义3组主题?类似的东西:
default-theme {
$light-theme: rgba(94,161,215,0.3);
$dark-theme: #5EA1D7;
$darker-theme: #57647A;
$very-dark-theme: #455061;
}
dark-theme {
$light-theme: black;
$dark-theme: brown;
$darker-theme: black;
$very-dark-theme: black;
}
light-theme {
$light-theme: black;
$dark-theme: brown;
$darker-theme: black;
$very-dark-theme: black;
}
我想根据所选主题更改值。 例如,我有3个按钮,选择它们,将改变变量颜色。
app.component.html
<button mat-raised-button (click)="onSetTheme('default-theme')">Default</button>
<button mat-raised-button (click)="onSetTheme('dark-theme')">Dark</button>
<button mat-raised-button (click)="onSetTheme('light-theme')">Light</button>
app.component.ts
onSetTheme(theme) {
//TODO here I want to change the theme
}
如何更改onSetTheme()函数内的主题。
谢谢!
答案 0 :(得分:0)
Sass是CSS的预处理器,可以让您在开发过程中更轻松地编写样式规则。浏览器不会加载.scss / .sass文件;它将加载CSS - 因此必须将.scss / .sass转换为浏览器的CSS。
您的Sass变量只是Sass文件中的变量。转换为CSS后,变量将替换为编译时表示的值。
body {
background: $dark-theme;
}
body {
background: black;
}
您的onSetTheme
函数是一个javascript函数,它将在浏览器中运行,无法更改sass变量,因为它们此时不存在。浏览器只加载编译的CSS(它不会加载原始的Sass文件和变量)。
答案 1 :(得分:0)
您可以将SASS变量和其他SASS物料以及CSS变量一起使用。
SASS
$body-margin: 0 10px;
:root {
--bg-color: #000;
--text-color: #FFF;
}
body {
background: var(--bg-color);
color: var(--text-color;
margin: $margin;
}
JS
onSetTheme(theme) {
let bgColor, textColor;
switch(theme) {
case light:
bgColor = #FFF;
textColor = #000;
break;
case dark:
bgColor = #000;
textColor = #FFF;
break;
}
document.querySelector('body').style.setProperty('--bg-color', bgColor);
document.querySelector('body').style.setProperty('--text-color', textColor);
}