J'ai un composant dans Angular 2 appelé my-comp:
<my-comp></my-comp>
Comment styliser l'élément hôte de ce composant dans Angular 2?
Dans Polymer, vous utiliseriez le sélecteur ": host". Je l'ai essayé dans Angular 2. Mais cela ne fonctionne pas.
:host {
display: block;
width: 100%;
height: 100%;
}
J'ai également essayé d'utiliser le composant comme sélecteur:
my-comp {
display: block;
width: 100%;
height: 100%;
}
Les deux approches ne semblent pas fonctionner.
Merci.
css
angular
css-selectors
angular-components
Ravi Teja Gudapati
la source
la source
my-selector { color : red}
dans mon css et cela fonctionne très bien.Réponses:
Il y avait un bug, mais il a été corrigé entre-temps.
:host { }
fonctionne bien maintenant.Sont également pris en charge
:host(selector) { ... }
pourselector
faire correspondre les attributs, les classes, ... sur l'élément hôte:host-context(selector) { ... }
pourselector
faire correspondre des éléments, des classes, ... sur des composants parentsselector /deep/ selector
(l'aliasselector >>> selector
ne fonctionne pas avec SASS) pour que les styles correspondent à travers les limites des élémentsMISE À JOUR: SASS est obsolète
/deep/
.Angular (TS et Dart) ajouté
::ng-deep
en remplacement qui est également compatible avec SASS.UPDATE2:
::slotted
::slotted
est désormais pris en charge par tous les nouveaux navigateurs et peut être utilisé avec `ViewEncapsulation.ShadowDomhttps://developer.mozilla.org/en-US/docs/Web/CSS/::slotted
Voir aussi Charger le style css externe dans le composant Angular 2
/deep/
et ne>>>
sont pas affectés par les mêmes combinateurs de sélecteurs que dans Chrome qui sont obsolètes.Angular les émule (les réécrit) et ne dépend donc pas des navigateurs les prenant en charge.
C'est aussi pourquoi
/deep/
et>>>
ne fonctionne pas avecViewEncapsulation.Native
qui active le DOM shadow natif et dépend de la prise en charge du navigateur.la source
@Component({selector: 'some-selector', template: 'xxx', styles: [':host { display: block; background-color: green; border: solid 1px red; }']}) export class SomeClass {}
ViewEncapsularion.Emulated
(par défaut) mais pas avecNative
.:host { p { font-size: 80%; } }
de travailler dans un fichier ... component.css. Dès que j'essaye de l'utiliser avecstyles: [:host { p { font-size: 80%; } }]
ça ne fonctionne plus. Très étrange.J'ai trouvé une solution pour styliser uniquement l'élément composant. Je n'ai trouvé aucune documentation sur son fonctionnement, mais vous pouvez mettre des valeurs d'attributs dans la directive de composant, sous la propriété 'host' comme ceci:
MISE À JOUR: Comme Günter Zöchbauer l'a mentionné, il y avait un bogue, et maintenant vous pouvez styliser l'élément hôte même dans un fichier css, comme ceci:
la source
!important
à remplacer). Il doit y avoir un meilleur waayy: \host{}
dans unstylesUrl
fichier ne fonctionne pas. besoins:host
.@HostBinding('style.background-color') private color = 'lime';
Google vous trouvera de nombreux exemples et articles.Consultez ce problème . Je pense que le bogue sera résolu lorsque la nouvelle logique de précompilation du modèle sera implémentée. Pour l'instant, je pense que le mieux que vous puissiez faire est d'envelopper votre modèle
<div class="root">
et de le styliserdiv
:Voir ce plunker
la source
Dans votre composant, vous pouvez ajouter .class à votre élément hôte si vous souhaitez appliquer certains styles généraux.
la source
Pour tous ceux qui cherchent à styliser les éléments enfants d'un,
:host
voici un exemple d'utilisation::ng-deep
:host::ng-deep <child element>
par exemple
:host::ng-deep span { color: red; }
Comme d'autres l'ont dit, il
/deep/
est obsolètela source
Essayez le: host> / deep /:
Ajoutez ce qui suit au fichier parent.component.less
Remplacez le composant app-enfant par votre sélecteur enfant
la source