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.Nativejest prawidłowo obsługiwany przez wszystkie przeglądarki i obsługuje style poza granicami Shadow DOM, ::ng-deepprawdopodobnie 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 ::shadowzostał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.Emulatedtymi, 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?