Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to inherit css styles in child component from parent in Angular 5

Tags:

I have a parent component inside which I have a child component. The parent component have some css classes, where child component extends them. I tried to use :host as looking at documentation, but cant't seem to get it work properly.

child component:

<div class="table-row body"> <div class="table-cell body-content-outer-wrapper">     <div class="body-content-inner-wrapper">         <div class="body-content">             <div>This is the scrollable content whose height is unknown</div>             <div>This is the scrollable content whose height is unknown</div>             <div>This is the scrollable content whose height is unknown</div>         </div>     </div> </div> 

parent component:

         <div class="table container">                  <div class="table-row header">                         <button type="button" class="btn btn-info" data-toggle="collapse" data-target="#demo">Simple collapsible</button>                         <div id="demo" class="collapse">                             Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.                             Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.                         </div>                   </div>             <app-child-component></app-child-component>                 </div> 

parent component css:

  :host  .table {     display: table;   }    :host .table-row {     display: table-row;   }    :host .table-cell {     display: table-cell;   }    :host .container {    width: 400px;    height: 100vh;   }    :host  .header {     background: cyan;  }     :host .body {     background: yellow;     height: 100%;  }    :host .body-content-outer-wrapper {     height: 100%;  }   .body-content-inner-wrapper {     height: 100%;    position: relative;    overflow: auto; }   .body-content {     position: absolute;    top: 0;    bottom: 0;    left: 0;    right: 0; } 

The problem if even I put css classes inside the child component, the layout breaks just because there is a child-component template. So the main question is what is proper way for child to inherit extend css from parent component?

like image 367
AlexFF1 Avatar asked Mar 27 '18 14:03

AlexFF1


People also ask

Is it possible for a child component to inherit styles CSS from a parent component?

A parent component can style a child component, but it styles it as a single element. A parent can't reach into a child.

How do I apply CSS to child element based on parent?

It's easy to apply style to a child element, but if you want to apply style to a parent class that already has child elements, you can use the CSS selector child combinators (>), which are placed between two CSS selectors.

How do you send value from parent to child component?

Sending data to a child componentlinkThe @Input() decorator in a child component or directive signifies that the property can receive its value from its parent component. To use @Input() , you must configure the parent and child.


2 Answers

Why make things complex?

Ideal way to do would be to add refrence of parent css file in child component as well.

 @Component({     selector: 'child-app',     templateUrl: `./child.component.html`,     styleUrls:['./parent/parent.component.css', './child.component.css'] }) export class ChildComponent { } 
like image 164
Dheeraj Kumar Avatar answered Sep 18 '22 03:09

Dheeraj Kumar


With ::ng-deep, styles will be applied to the current component, but also trickle down to the components that are children to the current component in the component tree.

Example:

:host ::ng-deep app-child-component {        color:yellow;      } 

A good resource - Styles Between Components in Angular 2+

like image 20
Damien Asseya Avatar answered Sep 21 '22 03:09

Damien Asseya