我有一个名为 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
查询。