angular - 在 scss 中导入全局样式而不在每个组件上复制 scss
问题描述
我有一些包含一些 atomik 类的 scss 文件:
atomik.scss
.w-100 { width: 100%}
.w-75 { width: 75%}
.w-60 { width: 60%}
[...] //dozens of others classes
我可以在 HTML 中使用它们:
<div class="w-100">
或在其他scss
文件中:
foo.component.scss
@import 'atomik'
.foo {
@extend .w-100;
[...]
}
一开始它看起来很整洁,直到我意识到整个 atomik.scss
文件被复制到导入它的每个组件中。这似乎是 scss 的预期行为。
生成foo.component.js
[...]
styles: ["
.w-100 { width: 100%};
.w-75 { width: 75%}
.w-60 { width: 60%}
[...] //dozens of others classes
.foo {
width: 100%
}"]
[...]
似乎有一个带有placeholders的解决方案。
atomik.scss然后将变为:
%w-100 { width: 100%}
%w-75 { width: 75%}
%w-60 { width: 60%}
[...] //dozens of others classes
和foo.component.scss将变为:
@import 'atomik'
.foo {
@extend %w-100;
[...]
}
和生成的foo.component.js:
[...]
styles: ["
.foo {
width: 100%
}"]
[...]
好的 !但是......现在 atomik 类不能再在 HTML 中使用了:
<div class="%w-100"> <!-- will be interpreted as class %w-100 -->
如何使这些 CSS 属性在 HTML 中可重用,而无需手动重新定义将全局声明的 scss 中的所有属性。
有没有共同的模式?
解决方案
默认情况下,全局声明的所有类style.scss
都可用于 Angular 应用程序中的所有组件。您应该添加任何如此广泛使用的样式表style.scss
以使其可用于整个应用程序。
你可以导入你 atomik.scss
的styles.scss
,它会解决你的问题。请注意此处文件的导入顺序scss
,如果有多个导入,您最终可能会覆盖几个类。还要确保atomik.scss
以适用于其他组件的方式编写(考虑父子样式类)。
推荐阅读
- python - 从多个数据框中的列创建唯一列表,基于此创建 Excel 工作簿,并将数据框中的行放在不同的工作表上?
- scala - 如何使用 df.take() 显示表头?
- python - Django - 使用外部脚本从 url 下载图像并将它们插入到 imageField
- google-app-engine - 'gcloud deploy' 抱怨同时拥有 .gcloudignore 和 skip_files,即使我两者都没有
- database - 需要一些方向销售日期“休息”查询
- reporting - 在 Cognos BI 中对非数值数据进行交叉制表
- azure - 确保在 Azure 中按计划运行数千个 httprequest 的最佳方法是什么?
- python - psycopg2 - 多次插入,但插入一个公共时间戳
- python - 增加存储为布尔值列表的数字
- css - 如何从 css 检测 CPU 负载?