Suis ce tutoriel sur la transclusion https://scotch.io/tutorials/angular-2-transclusion-using-ng-content
Cependant, il n'y a aucune mention sur la façon de styliser les éléments qui finissent par remplacer ng-content.
Il semble que je ne puisse cibler ces éléments dans le CSS que si le /deep/
mot clé, qui est normalement utilisé lors du ciblage d'un composant imbriqué. Est-ce correct?
mise à jour
::slotted
est désormais pris en charge par tous les nouveaux navigateurs et peut être utilisé avec `ViewEncapsulation.ShadowDom
https://developer.mozilla.org/en-US/docs/Web/CSS/::slotted
original
::content xxx { ... }
pourrait également fonctionner ou :Host xxx { ... }
. Le calage n'est pas très strict ou précis. AUTANT QUE JE SACHE (>>>
/deep/
vieux) ::ng-deep
(pris en charge par SASS) et un espace font actuellement de même.
Contenu à l'intérieur <ng-content>
est isolé du composant. Il ne peut pas voir les attributs ou le style du composant.
Si vous avez besoin de le styliser, et parfois vous le ferez, vous avez deux options:
Vous pouvez créer un fichier CSS régulier et styliser le contenu comme ça. Vous utilisez presque certainement le polyfill DOM DOM. Le CSS standard verra à travers le polyfill et stylisera simplement l'élément. Supposons que vous ayez une barre latérale d'application. Vous pourriez écrire:
app-sidebar p {
color:red;
}
Si vous utilisez ng-cli, toutes les règles que vous écrivez dans style.scss seront globales.
Si vous souhaitez utiliser le polyfill DOM ombré et styliser vos composants à l'aide de l'attribut style
ou styleUrls
du décorateur Component
, sélectionnez l'élément avec :Host
, puis ignorez le polyfill DOM DOM avec le /deep/
sélecteur d'enfant.
:Host
sélectionnera l'élément./deep/
sélectionnera les éléments sans ajouter le sélecteur d'attribut DOM fictif aux sélecteurs imbriqués.Rassemblez-les et vous pouvez sélectionner tous les éléments imbriqués dans l'élément de composant Host, quel que soit l'endroit où ils sont déclarés.
ainsi:
:Host /deep/ p {
color:red;
}
Cela a résolu mon problème
::ng-deep {
& > * {
// styles here
}
}