aktualizacja 2 ::slotted
::slotted
jest teraz obsługiwany przez wszystkie nowe przeglądarki i może być używany z ViewEncapsulation.ShadowDom
https://developer.mozilla.org/en-US/docs/Web/CSS/::slotted
aktualizacja 1 :: ng-deep
/deep/
został wycofany i zastąpiony przez ::ng-deep
.
::ng-deep
jest już oznaczony jako przestarzały, ale nie ma jeszcze dostępnego zamiennika.
Kiedy ViewEncapsulation.Native
jest prawidłowo obsługiwany przez wszystkie przeglądarki i obsługuje style poza granicami Shadow DOM, ::ng-deep
prawdopodobnie zostanie wycofany.
oryginalny
Angular dodaje wszystkie rodzaje klas CSS do kodu HTML, który dodaje do DOM, aby emulować enkapsulację CSS shadow DOM, aby zapobiec pojawianiu się i wylewaniu stylów z komponentów. Angular również przepisuje dodany CSS, aby pasował do tych dodanych klas. Dla HTML dodanego przy użyciu[innerHTML]
tych klas nie są one dodawane, a przepisany CSS nie pasuje.
Aby obejść ten problem, spróbuj
- dla CSS dodanego do komponentu
/* :host /deep/ mySelector { */
:host ::ng-deep mySelector {
background-color: blue;
}
- dla CSS dodanych do
index.html
/* body /deep/ mySelector { */
body ::ng-deep mySelector {
background-color: green;
}
>>>
(i odpowiednik, /deep/
ale /deep/
działa lepiej z SASS) i ::shadow
zostały dodane w wersji 2.0.0-beta.10. Są podobne do kombinatorów Shadow DOM CSS (które są przestarzałe) i działają tylko z encapsulation: ViewEncapsulation.Emulated
tymi, które są domyślne w Angular2. Prawdopodobnie też z nimi współpracująViewEncapsulation.None
ale są wtedy ignorowane tylko dlatego, że nie są konieczne. Te kombinatory są tylko rozwiązaniem pośrednim, dopóki nie będą obsługiwane bardziej zaawansowane funkcje stylizacji między komponentami.
Innym podejściem jest użycie
@Component({
...
encapsulation: ViewEncapsulation.None,
})
dla wszystkich komponentów, które blokują CSS (w zależności od tego, gdzie dodasz CSS i gdzie HTML chcesz nadać styl - mogą to być wszystkie komponenty w Twojej aplikacji)
Aktualizacja
Przykład Plunker
index.html
?