How do I prevent Angular component styling override from carrying over to other components?

我们两清 提交于 2019-12-04 14:01:39

Your issue is caused by ::ng-deep, which will apply style to all .mat-input.underline elements in the page once the component has been loaded and style injected.

If you really want to keep the ::ng-deep combinator, you can add the :host selector to prefix your rule, which will target the host element and not leak the css to other components (apart from child components)

:host ::ng-deep .mat-input-underline
{
  display: none;
}

https://angular.io/guide/component-styles#host

"/deep/" is deprecated and "::ng-deep" is the way but be careful. Please go through below official documentation for detailed information.

https://angular.io/guide/component-styles#deprecated-deep--and-ng-deep

I'm assuming you are using Angular Cli to generate your components...

You need to Emulate the encapsulation property on your Component. Although Angular defaults to 'Emulate'. (Thanks David, for correcting me).

In a nutshell, Emulated allows your component to make use of global styles, while keeping its local styles to itself.

@Component({
  selector: 'app-child-component',
  template: `<div class="parent-class">Child Component</div>`,
  encapsulation: ViewEncapsulation.Emulated
})

Also, ::ng-deep is meant to pass styles from parents to children. So if you are trying to keep your child elements from adopting the styles of their parents, using that is working against you.

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!