Angular 中组件的全局 scss 文件和 scss 文件之间的区别

Difference between global scss file and scss file for component in Angular

在最近的 Angular 7 项目中,我有一个组件(在文件 file-list.component.ts 中定义),其中有一个 mat-paginator(来自 Angular material 的组件组件库)。当我想改变mat-paginator的背景颜色时,我首先尝试把

.mat-paginator-container {
  background-color: yellow;
}

film-list.component.scss(与该组件关联的样式表)中,分页器的背景颜色没有改变。当我把它放在 app.component.scss 中时,它也不起作用。但是当我把它放在 src/styles.css 中时,背景颜色被正确地改变了。

所以我的问题是:

src/styles.scss

用于全局 CSS,它将应用于所有应用程序和所有组件。在这里,您可以毫无问题地将样式应用于 body

example.component.scss

是 CSS 将限定范围并仅应用于此特定组件。在这里您将无法将样式应用于 body 元素。

您仍然可以突破作用域边界...

当在内部使用 mat-paginator 等组件时,假设 example.component.ts 例如, mat-paginator 中的 CSS 实际上是 "outside" example.component.ts 组件范围,因为 mat-paginator 有自己的范围。因此,您可以使用 ::ng-deep 穿​​透阴影-dom 以应用 CSS.

使用以下代码的工作示例:https://stackblitz.com/edit/angular-Whosebug-53241725

/* not working because the class is not directly inside this component */
.mat-paginator-container {
  background: yellow;
}

/* working because `ng-deep` pierce through the shadow-dom */
::ng-deep .mat-paginator-container {
  background: red;
}

建议的文档

关于样式的 Angular 官方文档: https://angular.io/guide/component-styles

很棒的博客,解释了 CSS 封装:https://blog.angular.io/the-state-of-css-in-angular-4a52d4bd2700