我找到了一个非常有用的解释,说明如何为其他非材料组件应用材质主题颜色方案/调色板here .
在我读到这篇文章之前,我想到了类似但却无法想象如何考虑Theming your Angular Material app的建议,如果我不想只有全局主题:
不应将自定义主题文件导入其他SCSS文件 . 这将在CSS输出中复制样式 . 如果你想在其他SCSS文件中使用你的主题定义对象(例如,$ candy-app-theme),那么主题对象的定义应该被分解为它自己的文件,与mat-core和angular的包含分开-material-theme mixins .
我想知道这个建议是否意味着只应该使用全局样式表/主题?否则我无法想象如何在不违反上述建议的情况下将scss-theme导入组件的scss文件中 .
我是Sass的新手,也许在这里遗漏了一些东西 .
2 回答
我遇到了同样的问题,一些讨论可以找到here,以及一个处理问题here的精辟博客 .
重点是 - 正如主题指南正确陈述的那样 - 你不应该在整个项目中多次导入mixins
@include mat-core()
和@include angular-material-theme($your-theme)
. 但是当你想要将整个主题导入SASS组件时,不小心会复制材料混合 .我认为最终的解决方案是主题指南所描述的解决方案
但是,由于我最初不清楚如何做到这一点,所以对于任何坚持相同的人来说,这是一步一步:
assets/styles/partials
文件夹我的文件夹看起来像这样:
_theme
partial包含以下内容:而已 . 请勿在此文件中包含材料mixins
mat-core
和angular-material-theme
.assets/styles/my-theme.scss
. 它只包含三行:通过这样做,我们分离了我们的主题部分,包括我们的所有客户调色板,脚手架和变量,从包含mat-core和我们的自定义材料主题的文件 .
有了这个,我们的应用程序始终使用我们的自定义材质主题,但由于主题定义(在
theme
部分中)与包含材质mixin(在my-theme
中)是分开的,我们可以安全地将我们的theme
partial包含到任何组件中,而无需复制任何CSS .(可选)您可以通过将部分路径添加到Angular.json中的stylePreprocessorOptions来简化主题部分的导入:
只需
@import 'theme'
在任何组件scss文件中,我们可以访问所有变量和材料主题功能,如mat-color :)你现在应该这样做:
但你应该以此为目标:
这就是我理解它的方式 .