Стиль не применяется к дочернему компоненту
Я пытаюсь применить стилизацию к тегу дочернего компонента, но не могу этого сделать.
У меня есть дочерний компонент с тегом привязки.
Хотя у меня есть стиль для тега привязки в родительском компоненте, он не применяется. Какое решение для этого?
Рабочий код: http://plnkr.co/edit/CJCpV4ZbG7hdxT2AeSmt?p=preview
<a href="#" onclick="location.href='https://www.google.com'; return false;">Google</a>
В родительском компоненте я использую дочерний компонент и применяю стилизацию для этого дочернего компонента.
HTML-код:
<div class="container">
<div class="test">
<testapp></testapp>
</div>
</div>
Код CSS:
.container{
font-family:sans-serif;
font-size:18px;
border: 1px solid black;
}
.test{
width:50%;
background-color:#f0f5f5;
}
.container:hover .test{
background-color:#e6ffe6;
}
.container:hover .test:hover{
background-color:#ffffe6;
}
.container .test a {
color: red ;
}
.container .test a:hover {
color:green;
}
Ответы
Ответ 1
Это потому, что по умолчанию компоненты имеют инкапсуляцию вида (shadow dom). Чтобы отключить это поведение, вы можете использовать атрибут encapsulation
, как описано ниже:
import {Component, ViewEncapsulation} from '@angular/core';
import {TestApp} from 'testapp.component.ts';
@Component({
selector:'test-component',
styleUrls: ['test.component.css'],
templateUrl: './test.component.html',
directives:[TestApp],
encapsulation: ViewEncapsulation.None // <------
})
export class TestComponent{
}
См. Этот plunkr: http://plnkr.co/edit/qkhkfxPjgKus4WM9j9qg?p=preview.
Ответ 2
При использовании свойства styleUrls стили локальны для одного компонента, а не для его дочерних элементов. Таким образом, я сделал два изменения: 1) Переместил стильUrls к компоненту testapp. 2) Переместил div в компонент testapp.
import {Component} from '@angular/core';
@Component({
selector:'testapp',
styleUrls: ['./test.component.css'],
template: '
<div class="test">
<a href="https://www.google.com">Google</a>
</div>
'
})
export class TestApp{
}
Ответ 3
EDITED: Это должно решить:
В css дочернего класса напишите ниже код
:host.parentclass childclass{
}
Родительский класс является непосредственным родителем дочернего элемента. childclass - класс, применяемый к дочернему компоненту.