У меня есть компонент в Angular 2 под названием my-comp:
<my-comp></my-comp>
Как можно стилизовать хост-элемент этого компонента в Angular 2?
В Polymer вы должны использовать селектор ": host". Я попробовал это в Angular 2. Но это не работает.
:host {
display: block;
width: 100%;
height: 100%;
}
Я также попытался использовать компонент в качестве селектора:
my-comp {
display: block;
width: 100%;
height: 100%;
}
Оба подхода не работают.
Спасибо.
css
angular
css-selectors
angular-components
Рави Теджа Гудапати
источник
источник
my-selector { color : red}
в моем CSS и он отлично работает.Ответы:
Была ошибка, но она была исправлена.
:host { }
сейчас работает нормально.Также поддерживаются
:host(selector) { ... }
дляselector
сопоставления атрибутов, классов, ... в элементе хоста:host-context(selector) { ... }
дляselector
сопоставления элементов, классов, ... на родительских компонентахselector /deep/ selector
(псевдонимselector >>> selector
не работает с SASS), чтобы стили соответствовали границам элементовОБНОВЛЕНИЕ: SASS устарела
/deep/
.Angular (TS и Dart) добавлен
::ng-deep
в качестве замены, который также совместим с SASS.UPDATE2:
::slotted
::slotted
теперь поддерживается всеми новыми браузерами и может использоваться с `ViewEncapsulation.ShadowDomhttps://developer.mozilla.org/en-US/docs/Web/CSS/::slotted
См. Также Загрузка внешнего стиля CSS в Angular 2 Component.
/deep/
и>>>
которые не затрагиваются теми же комбинаторах селекторных , что в Chrome которые являются устаревшими.Angular эмулирует (переписывает) их и поэтому не зависит от браузеров, поддерживающих их.
Это также объясняет , почему
/deep/
и>>>
не работают с ,ViewEncapsulation.Native
что позволяет родной теневую DOM и зависит от поддержки браузера.источник
@Component({selector: 'some-selector', template: 'xxx', styles: [':host { display: block; background-color: green; border: solid 1px red; }']}) export class SomeClass {}
ViewEncapsularion.Emulated
(по умолчанию), но не сNative
.:host { p { font-size: 80%; } }
работать в файле ... component.css. Как только я пытаюсь использовать его,styles: [:host { p { font-size: 80%; } }]
он больше не работает. Очень странно.Я нашел решение, как стилизовать только элемент компонента. Я не нашел никакой документации о том, как это работает, но вы можете поместить значения атрибутов в директиву компонента под свойством 'host' следующим образом:
ОБНОВЛЕНИЕ: Как упоминал Гюнтер Цохбауэр, была ошибка, и теперь вы можете стилизовать элемент хоста даже в файле css, например так:
источник
!important
переопределять). Должен быть лучший waayy: \host{}
вstylesUrl
файле не работает. необходимо:host
.@HostBinding('style.background-color') private color = 'lime';
Google найдет вам много примеров и статей.Проверьте эту проблему . Я думаю, что ошибка будет решена, когда будет реализована новая логика прекомпиляции шаблона . Сейчас я думаю, что лучшее, что вы можете сделать, - это обернуть ваш шаблон
<div class="root">
и стилизовать этоdiv
:Смотрите этот плункер
источник
В вашем Компоненте вы можете добавить .class к вашему элементу host, если у вас есть общие стили, которые вы хотите применить.
источник
Для тех, кто ищет стиль дочерних элементов,
:host
вот пример того, как использовать::ng-deep
:host::ng-deep <child element>
например
:host::ng-deep span { color: red; }
Как говорили другие,
/deep/
не рекомендуетсяисточник
Попробуйте: host> / deep /:
Добавьте следующее в файл parent.component.less
Замените app-child-component вашим дочерним селектором
источник