Thomas Zilliox
Expert CSS Freelance à Lyon

Désactiver l'isolation des CSS

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.

Thomas ZILLIOX

That's my face!

Je suis un développeur CSS freelance sur Lyon.
En tant qu’expert CSS, on dit parfois que je suis « l’homme qui murmure à l'oreille des chevrons ».

Je suis également le co-créateur de Zupple Escape Game Lyon qui propose une salle d’escape game, des jeux de piste, des team building, de nombreuses énigmes en ligne, et même un podcast. Une aventure extraordinaire, grâce à laquelle il n’y a pas deux jours qui se ressemblent.