14

I am trying to style <ng-content> using inline css but seems style does't work on ng-content, i have to do something else for styling ?

<ng-content class="red"></ng-content> <p class="red">hello</p> 

here class red works on p but not on

Working Example

4 Answers 4

8

::content is ignored.

This comes closes

You can use the ::content selector

styles: ['.red {color:red} :host >>> upper {color:green}'] 

or

styles: ['.red {color:red} :host >>> * {color:green}'] 

And if there are fellow LESS users, seems that LESS compiler dislikes >>> syntax, so you need to add an alias for that, eg. @deep: ~">>>"; and then use that like @{deep} { /* your deep styles here */ }

See also this discussion https://github.com/angular/angular/issues/7400#issuecomment-246922468

You can use the ::content selector

styles: ['.red {color:red} ::content >>> upper {color:green}'] 

or

styles: ['.red {color:red} ::content >>> * {color:green}'] 

According to the web components spec ::content should be enough and >>> should not be required but the styles were not applied without it.

Plunker example

Sign up to request clarification or add additional context in comments.

5 Comments

waoo great, but what if i have multiple ng-content i mean named ng-contents than how can i apply style to them ? can you please provide any link where i can read about this ::content and >>> ?
I explained a bit in stackoverflow.com/questions/32853924/… and stackoverflow.com/questions/34542143/…. Angular emulates the shadow DOM selectors with a few limitations.
I guess you need to wrap <ng-content> like <div class="wrapper1"><ng-content></ng-content></div> and then use it like .wrapper1 ::content >>> upper.
is there any way to know wether the content is there or not ina component?
@MukulJayaprakash something like stackoverflow.com/questions/43718456/…
4

In fact, it's because is replaced by the input content. The element doesn't exist in the in-memory DOM.

Regarding your sample, when using upper:

<upper>Some text</upper> 

that has the following template:

<ng-content class="red"></ng-content> <p class="red">hello</p> 

You will have this in the DOM:

<upper _nghost-dks-2=""> Some text <p _ngcontent-dks-2="" class="red">hello</p> </upper> 

For this reason, you can't use class="red" on ng-content.

3 Comments

so how can i style ng-content ?
You can't ;-) but you style elements in it... For example: <upper><p class="red">Some text</p></upper>
already tried this but not suitable as per my requirement. btw thanks for answer.
0

Just wrap the ng-content and use css to select inside it?

<div class="red"><ng-content></ng-content></div> 

CSS:

.red > * { color: red; } 

1 Comment

Scoped component CSS does not work like this.
0

Try adding your css into the parent css file: app/src/style.css

NOT into your component's styleUrls's css file (which you included inside the component like this styleUrls: ['design.css'])

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.