如何在 angular2 + Less 中动态切换 css 主题?
How to switch css theme on the fly in angular2 + Less?
我正在努力解决这个问题,但找不到任何答案,尽管这似乎是一种常见的情况。
我正在 angular5 中构建一个网络应用程序,所有样式都使用 @component styleUrls。
我用的less,所有颜色定义在一个global-vars.less文件中,导入到所有封装的组件中。
global-vars.less:
@color_0: #283238;
some-component.less:
@import '../../global-vars';
.my-div {
background-color: @color_0;
}
我想在 global-vars 中添加一个图层。less 可以通过 parent class:
切换颜色
global-vars.less:
@color_0: #283238;
@color_1: #EEFFEE;
.dark-theme {
@background-app-color: @color_0;
}
.light-theme {
@background-app-color: @color_1;
}
some-component.less:
@import '../../global-vars';
.my-div {
background-color: @background-app-color;
}
当然,它不能像 LESS pre-compiles 那样工作。但是我找不到可行的技术。
我尝试更改 header 中的 CSS 文件,但是因为 angular 使用作为标签插入的封装样式表,这对我没有帮助。
我尝试使用 mixin,但我无法根据 parent class 创建 mixin,所以运气不好。
我唯一的选择是复制所有模块的所有 CSS 层次结构
.parent {
.child {
background: @light-color;
}
}
.dark theme .parent {
.child {
background: @dark-color;
}
}
但由于项目庞大,维护起来将是一场噩梦
如有任何帮助,我们将不胜感激。
谢谢。
我使用 CSS 自定义属性(变量)找到了我的答案
显然,它已经有足够的支持,
使用它们我可以绕过所有 angular 封装问题。
我创建了一个 themes.css 文件并导入到 main.css。
我有:
:root {
--light_color_0: #FFF;
--light_color_1: #EEE;
--dark_color_0: #000;
--dark_color_1: #111;
}
在同一个文件中:
:root {
--bg_color: var(--light_color_0);
}
:root.darktheme {
--bg_color: var(--light_color_0);
}
在我的 angular 个组件中,我有:
.panel_popup {
background-color: var(--bg_color);
}
剩下的就是通过单击按钮添加 class。
希望对某人有所帮助
我正在努力解决这个问题,但找不到任何答案,尽管这似乎是一种常见的情况。
我正在 angular5 中构建一个网络应用程序,所有样式都使用 @component styleUrls。
我用的less,所有颜色定义在一个global-vars.less文件中,导入到所有封装的组件中。
global-vars.less:
@color_0: #283238;
some-component.less:
@import '../../global-vars';
.my-div {
background-color: @color_0;
}
我想在 global-vars 中添加一个图层。less 可以通过 parent class:
切换颜色global-vars.less:
@color_0: #283238;
@color_1: #EEFFEE;
.dark-theme {
@background-app-color: @color_0;
}
.light-theme {
@background-app-color: @color_1;
}
some-component.less:
@import '../../global-vars';
.my-div {
background-color: @background-app-color;
}
当然,它不能像 LESS pre-compiles 那样工作。但是我找不到可行的技术。 我尝试更改 header 中的 CSS 文件,但是因为 angular 使用作为标签插入的封装样式表,这对我没有帮助。 我尝试使用 mixin,但我无法根据 parent class 创建 mixin,所以运气不好。
我唯一的选择是复制所有模块的所有 CSS 层次结构
.parent {
.child {
background: @light-color;
}
}
.dark theme .parent {
.child {
background: @dark-color;
}
}
但由于项目庞大,维护起来将是一场噩梦
如有任何帮助,我们将不胜感激。 谢谢。
我使用 CSS 自定义属性(变量)找到了我的答案 显然,它已经有足够的支持, 使用它们我可以绕过所有 angular 封装问题。
我创建了一个 themes.css 文件并导入到 main.css。
我有:
:root {
--light_color_0: #FFF;
--light_color_1: #EEE;
--dark_color_0: #000;
--dark_color_1: #111;
}
在同一个文件中:
:root {
--bg_color: var(--light_color_0);
}
:root.darktheme {
--bg_color: var(--light_color_0);
}
在我的 angular 个组件中,我有:
.panel_popup {
background-color: var(--bg_color);
}
剩下的就是通过单击按钮添加 class。 希望对某人有所帮助