обновление 2 ::slotted
::slotted
теперь поддерживается всеми новыми браузерами и может использоваться с ViewEncapsulation.ShadowDom
https://developer.mozilla.org/en-US/docs/Web/CSS/::slotted
обновление 1 :: ng-deep
/deep/
был устаревшим и заменен ::ng-deep
.
::ng-deep
также уже помечен как устаревший, но пока нет замены.
Когда ViewEncapsulation.Native
все браузеры должным образом поддерживаются и поддерживают стилизацию по теневым границам DOM, ::ng-deep
вероятно, будут прекращены.
оригинал
Angular добавляет все виды CSS-классов в HTML-код, который он добавляет в DOM, чтобы эмулировать инкапсуляцию теневого DOM CSS для предотвращения появления стилей в компонентах. Angular также переписывает CSS, который вы добавляете, для соответствия этим добавленным классам. Для HTML, добавленного с использованием [innerHTML]
этих классов, не добавляются и переписанный CSS не совпадает.
В качестве обходного пути попробуйте
- для CSS добавлен в компонент
/* :host /deep/ mySelector { */
:host ::ng-deep mySelector {
background-color: blue;
}
- для CSS добавлено
index.html
/* body /deep/ mySelector { */
body ::ng-deep mySelector {
background-color: green;
}
>>>
(и аналог, /deep/
но /deep/
лучше работает с SASS) и ::shadow
были добавлены в 2.0.0-бета.10. Они похожи на CSS-комбинаторы теневого DOM (которые устарели) и работают только с тем, encapsulation: ViewEncapsulation.Emulated
который используется по умолчанию в Angular2. Они, вероятно, также работают, ViewEncapsulation.None
но игнорируются только потому, что в этом нет необходимости. Эти комбинаторы являются лишь промежуточным решением, пока не поддерживаются более продвинутые функции для многокомпонентного стиля.
Другой подход заключается в использовании
@Component({
...
encapsulation: ViewEncapsulation.None,
})
для всех компонентов, которые блокируют ваш CSS (зависит от того, где вы добавляете CSS и где находится HTML, который вы хотите стилизовать - это могут быть все компоненты в вашем приложении)
Обновить
Пример Плункер
index.html
?