为啥子组件样式被全局 css 覆盖?

Posted

技术标签:

【中文标题】为啥子组件样式被全局 css 覆盖?【英文标题】:why child component styles overwriting by global css?为什么子组件样式被全局 css 覆盖? 【发布时间】:2017-03-02 14:17:31 【问题描述】:

我在我的 index.html 中导入了一个基本 css 文件,其中包括宽度为 auto,但这种样式优先于我使用 styleUrls 在组件中定义的样式(使用宽度为 70%):[“...” ]。确保我的组件范围的 css 优先于传统方式定义的样式的最佳方法是什么?我是否应该将全局样式限定为***组件?

【问题讨论】:

请分享您的代码。 【参考方案1】:

通常,组件中的 css 是具有优先权的。你可以尝试使用

封装:在你的 app.component 中查看Encapsulation.None。

如果您的组件中有一个类,它将具有优先权。

https://angular.io/docs/ts/latest/guide/component-styles.html

【讨论】:

【参考方案2】:

您可以在全局 css 中增加选择器的特异性。

当你有你的<my-comp class="some-class">

.someClass 
  width: 70%;

然后你可以覆盖

body .some-class.some-class 
  width: 100%;

body my-comp.some-class.some-class 
  width: 100%;

增加选择器特异性的最佳方式取决于您的具体要求。

https://developer.mozilla.org/en-US/docs/Web/CSS/Specificity

【讨论】:

【参考方案3】:

为了覆盖全局 scss,只需在 component.ts 文件中添加以下行 (encapsulation: ViewEncapsulation.None)

  @Component(  selector: 'app-custom-component',
      templateUrl: './custom-component.component.html',
      styleUrls: ['./custom-component.component.scss'],
      encapsulation: ViewEncapsulation.None
    )

【讨论】:

以上是关于为啥子组件样式被全局 css 覆盖?的主要内容,如果未能解决你的问题,请参考以下文章

react覆盖组件样式的3种方法

如何在 React App 中排除全局样式?

vuejs的组件化开发中,要怎么自定义class,覆盖原有的css样式

vue+webpack+element打包后线上样式不一致

Angular - 样式被忽略/覆盖

如何使用 Webpack 和 Angular 将全局 css 样式与 in-js 组件样式一起使用?