我正在努力解决这个问题并且找不到任何答案,尽管这似乎是一种常见的情况。
我正在使用angular5构建一个web应用程序,所有样式都使用@component styleUrls。
我使用less,所有颜色都在global-vars.less文件中定义,导入到所有封装组件。
全局vars.less:
@color_0: #283238;
一些-component.less:
@import '../../global-vars';
.my-div {
background-color: @color_0;
}
我想在global-vars.less中添加一个图层来按父类切换颜色:
全局vars.less:
@color_0: #283238;
@color_1: #EEFFEE;
.dark-theme {
@background-app-color: @color_0;
}
.light-theme {
@background-app-color: @color_1;
}
一些-component.less:
@import '../../global-vars';
.my-div {
background-color: @background-app-color;
}
当然,它无法正常工作,因为LESS预先编译了所有内容。但我找不到一种工作方法。 我尝试从标题中更改CSS文件,但因为angular使用封装的样式表作为标记插入,这对我没有帮助。 我尝试使用mixins,但我不能根据父类创建一个mixin,所以没有运气。
我唯一的选择是复制所有模块的所有CSS层次结构
.parent {
.child {
background: @light-color;
}
}
.dark theme .parent {
.child {
background: @dark-color;
}
}
但由于项目规模巨大,这将是一场噩梦
非常感谢任何帮助。 感谢。
答案 0 :(得分:0)
我使用CSS自定义属性(变量)找到了答案 显然,它已经有了足够的支持, 使用它们我可以绕过所有角度封装问题。
我创建了一个导入main.css的themes.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);
}
从我的角度组件中我有:
.panel_popup {
background-color: var(--bg_color);
}
剩下的就是通过单击按钮添加一个类。 希望它可以帮助某人