Right way to override child component style from host component angular

后端 未结 2 1265
忘掉有多难
忘掉有多难 2020-12-11 04:30

What is the right way to override child component style from host component. I tried using encapsulation: ViewEncapsulation.None but i need to write the overri

相关标签:
2条回答
  • 2020-12-11 05:00

    My "way" is using viewEncapsulation.None, important and add class to the child. the forked stackblitz's Connors

    //The parent
    .child1 .child-div {
      background-color: lime!important;
      height: 200px!important;
    }
    
    <div style="text-align: center;" class='parent'>Hi I am the app-root and I contain child-comp!
    <app-child class="child1"></app-child>
    <app-child ></app-child>
    </div>
    
    0 讨论(0)
  • 2020-12-11 05:10

    If you have control on the child component code, you can define a customStyle input property:

    @Input() customStyle: {};
    
    <div class="child-div" [ngStyle]="customStyle">I am the child</div>
    

    and pass it from the parent component:

    <app-child [customStyle]="style1"></app-child>
    
    style1 = {
      backgroundColor: "red",
      height: "150px"
    }
    

    See this stackblitz for a demo.


    A similar technique can allow to pass a specific style attribute to the child component:

    @Input() backgroundColor: string;
    
    <div class="child-div" [style.background-color]="backgroundColor">I am the child</div>
    

    from the parent component:

    <app-child backgroundColor="red"></app-child>
    

    See this stackblitz for a demo.


    Otherwise, until an alternative method is proposed by Angular, you can use the ::ng-deep shadow-piercing descendant combinator to modify the child component styling from the parent CSS:

    :host ::ng-deep .parent .child-div {
      background-color: lime;
      height: 200px;
    }
    

    See this stackblitz for a demo.

    0 讨论(0)
提交回复
热议问题