gpt4 book ai didi

css - 避免 Angular Material 主题中的重复样式

转载 作者:行者123 更新时间:2023-12-05 06:11:51 25 4
gpt4 key购买 nike

我有一个如下所示的 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 查询。

最佳答案

您应该包括 mat.all-component-colors 而不是 mat.all-component-themes

例子:下面是错误的

// Generates styles for all systems configured in the theme. In this case, color styles
// and default density styles are generated. Density is in themes by default.
@include mat.all-component-themes($light-theme);

.dark-theme {
// Generates styles for all systems configured in the theme. In this case, color styles
// and the default density styles are generated. **Note** that this is a problem because it
// means that density styles are generated *again*, even though only the color should change.
@include mat.all-component-themes($dark-theme);
}

改用这个:

@use '@angular/material' as mat;

...
@include mat.all-component-themes($light-theme);

.dark-theme {
// This mixin only generates the color styles now.
@include mat.all-component-colors($dark-theme);
}

欲了解更多信息,Official Docs

关于css - 避免 Angular Material 主题中的重复样式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63786558/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com