如何在子组件 scss 文件中覆盖 main.component.scss 中的 css

Posted

技术标签:

【中文标题】如何在子组件 scss 文件中覆盖 main.component.scss 中的 css【英文标题】:How to overwrite a css from main.component.scss in a child component scss file 【发布时间】:2019-03-08 11:16:49 【问题描述】:

我的 Angular 6 应用程序的主要组件有一个 scss 文件,其中我为 html 元素添加了一个 css 属性。我想覆盖子组件中 scss 文件中的 css 属性。我试过把:host /deep/!important。没有什么对我有用。我已经尝试从 .ts 文件中更改 css 属性并且它有效。我只想在我的 scss 文件中覆盖相同的内容。

示例: main.component.scss

.global-content 
  margin-left: 12rem;

这是主要的组件 scss 文件。我正在尝试像这样覆盖我的子组件中的相同 css 属性

child.component.scss

:host /deep/ .global-content 
  margin-left: 2rem !important;

提前致谢

【问题讨论】:

【参考方案1】:

请阅读这篇文章,了解如何在 Angular 中使用 sass 封装。 https://blog.angular-university.io/angular-host-context/

还可以尝试删除“/”正斜杠。取决于你的结构,可能会也可能不会。

:host  
   deep  
      .global-content  margin-left: 2rem !important; 
   

以上只是猜测,这里我无法测试。

或者你可以使用 ng-deep css 伪元素:

:host ::ng-deep .global-content  margin-left: 2rem !important; 

希望对你有帮助。

【讨论】:

也许是这个? :host(.global-content) margin-left: 2rem !important; 【参考方案2】:

添加您的全局样式表

喜欢

app-root app-child .child-div 
   //add whatever css property you want to call

参考:You Can Check Here

【讨论】:

以上是关于如何在子组件 scss 文件中覆盖 main.component.scss 中的 css的主要内容,如果未能解决你的问题,请参考以下文章

覆盖通过 JavaScript 文件加载的 SCSS 文件变量的可行方法是啥?

如何从组件中引用 SCSS 文件的目录?

如何在 vue js 组件中使用 scss 文件?

不同预处理器less、scss等下如何写样式穿透

在子文件夹中的 Vuejs 中全局注册组件

使用 SASS 类覆盖 Material UI 组件