Thomas Zilliox
Intégrateur CSS Freelance à Lyon

Désactiver l'isolation des CSS

Voir les commentaires

Angular a adopté une stratégie très protectrice pour vos feuilles de styles. Il va les retraiter pour assurer leur isolation par rapport au reste de la page. Par exemple:

<!-- Quand j'écris le code suivant -->
<hero-details>
  <h3>Team</h3>
</hero-detail>

<!-- Angular va générer ce DOM -->
<hero-details _nghost-pmm-6>
  <h3 _ngcontent-pmm-6>Team</h3>
</hero-detail>
/* Quand j'écris le code suivant */
h3 {
  color: hotpink;
}

/* Angular va générer ce CSS */
h3[_ngcontent-pmm-6] {
  color: hotpink;
}

Dans ce cas-là, alors qu'on a écrit un sélecteur CSS très générique (h3), celui va sélectionner que les éléments qui se trouvent à l'intérieur de notre composant. Pour que ça fonctionne l'attribut "magique" _ngcontent-pmm-6 est unique à chaque instance du composant.

En effet, ça peut être très utile. Je trouve ça quand même très désagréable de voir mon code complètement réécrit. Mon temps de debug peut aussi être allongé, lorsque je n'arrive pas à comprendre pourquoi ça ne fonctionne pas. Et puisque j'applique pratiquement toujours la méthode BEM, cette fonctionnalité ne m'intéresse pas forcément.4

Pour la désactiver, il faut utiliser l'annotation encapsulation: ViewEncapsulation.None :

import { Component, ViewEncapsulation } from "@angular/core";

@Component({
  selector: "my-component",
  templateUrl: "./my-component.component.html",
  styleUrls: ["./my-component.component.scss"],
  encapsulation: ViewEncapsulation.None
})
export class MyComponent {}

Oui… Il faut donc le faire sur chaque composant !

Source : la documentation d'Angular.

Happy coding[_blogcontent-zft-1], Thomas.

comments powered by Disqus
That's my face!

Thomas ZILLIOX

L'homme qui murmurait à l'oreille des chevrons.

Je développe, j'intègre, je forme ou je conseille sur les CSS. Besoin d'améliorer la maintenabilité ou les performances de vos projets ?