Angular. Стилизация host элемента
Имеется HelloComponent компонент:
@Component({
selector: 'hello',
template: `<div class="wrap">Hello {{name}}!</div>`,
styleUrls: ['hello.component.css'],
})
export class HelloComponent {
@Input() name: string = 'Angular';
}При его размещении в приложении (<hello></hello>) разметка будет выглядеть следующим образом:
<hello>
<div class="wrap">Hello Angular!</div>
</hello>Чтобы стилизовать сам <hello> (хост), в котором размещается содержимое компонента, применяются специальные селекторы из мира shadow DOM.
:host
Cелектор псевдокласса :host стилизует хост компонент.
:host {
display: block;
background-color: lightcoral;
}Селектор :host является единственным способом стилизовать хост т.к. он не является частью собственного шаблона компонента. Элемент host находится в шаблоне родительского компонента.
:host(selector)
Для установки стилей хост компоненту при наличии на нём определённого класса используется функциональная форма с круглыми скобками :host(selector).
Следующий стиль будет применён к хост компоненту, если на компонент повесить класс active например через @HostBinding т.е. <hello class="active"></hello>
:host(.active) {
font-weight: bold;
font-size: 24px;
}:host-context(selector)
Для установки стилей зависящих от каскада родительских элементов применяется форма :host-context(selector)
Следующий стиль будет применён к хост компоненту, если он размещен внутри <aside> элемента (<aside><hello></hello></aside>).
:host-context(aside) {
text-align: right;
background-color: lightblue;
}