【发布时间】:2020-09-08 03:03:10
【问题描述】:
我有一个styles.theme.scss,如下所示。
@media (prefers-color-scheme: dark) {
@include example-theme($dark-theme);
}
@media (prefers-color-scheme: light) {
@include example-theme($light-theme);
}
[data-theme="dark-theme"] {
@include example-theme($dark-theme);
}
[data-theme="light-theme"] {
@include example-theme($light-theme);
}
如果用户代理配置了prefers-color-scheme,目标是使用它,但如果用户在网站上配置了它,则覆盖它。
但是,当前的 SCSS 会导致以下警告:
WARNING: The same color styles are generated multiple times. Read more about how style duplication can be avoided in a dedicated guide. https://github.com/angular/components/blob/master/guides/duplicate-theming-styles.md
node_modules/@angular/material/_theming.scss 1648:7 -mat-check-duplicate-theme-styles()
node_modules/@angular/material/_theming.scss 7010:3 angular-material-theme()
stdin 29:3 example-theme()
stdin 57:3 root stylesheet
我已经检查了提供的文档,但它似乎没有涵盖这种情况,我不确定如何更好地构造它以避免重复样式。
我认为唯一可行的解决方案是使用 JavaScript 检测首选项,然后在应用程序中未配置主题时设置 data-theme 属性。
还有比这更好的解决方案吗?
我尝试过的:
- 看看我是否可以像
[data-theme="dark-theme"], @media (prefers-color-scheme: dark)这样将媒体查询和选择器串在一起,我认为这是不可能的。 - 如果我可以使用 SASS
@if和@else检查data-theme选择器是否匹配任何元素,否则包括@media查询。
【问题讨论】: