CSS :root, le retour aux racines

La cascade CSS est la meilleure et la pire des choses. Dans cet article limpide, Simurai donne quelques astuces simples pour réduire les problèmes de spécificité et mieux comprendre CSS.

Par

La cascade CSS est comme la langue d’Ésope, la meilleure et la pire des choses. Elle fonctionne généralement bien, mais elle présente des inconvénients qui amènent parfois certains à se demander si nous avons vraiment encore besoin de CSS. Je les rejoins quelquefois — mais je pense également que la cascade n’est pas la seule responsable et que nous devons souvent nous battre contre la spécifité. Il est difficile de ne pas rencontrer de problèmes de spécificité, à peu près aussi difficile que de prononcer le mot.

Dans cet article, je vais essayer de montrer que la cascade peut être votre amie et nous allons voir quelques façons de réduire le besoin d’écraser des styles et donc de réduire les problèmes de spécificité.

Astuce 1 :

Pour chaque propriété CSS que vous écrivez, essayez de la remonter aussi haut que possible vers la racine de l’arbre. En d’autres termes : back to the :root.

Par exemple, si notre site a une side bar et que nous voulons y insérer une petite bio. Le balisage ressemblerait à ceci :

//HTML
<body>  
    <main class=“Posts”>
    <aside class=“SideBar”>
        <nav class=“Nav”>
        <p class=“Bio”>

...et le CSS :

//CSS
.Bio {
    font-size: .8em;
    line-height: 1.5;
    color: #888;
}

Ça pourrait marcher. Mais si nous regardons la nav qui est déjà dans la side bar, il y a des chances que certains des styles soient identiques, dans notre cas, ce serait font-size et color. Donc, retirons ces propriétés de nav et de .Bio et ajoutons-les à l’élément parent, la side bar.

//CSS
.SideBar {
    font-size: .8em;
    color: #888;
}

De plus, il se trouve que cette line-height: 1.5; est déjà définie pour nos articles. Donc, puisqu’il semble que toute la page utilise la même hauteur de ligne, retirons-la des éléments Bio et Post et remontons-la au niveau du noeud racine.

//CSS
:root {
    line-height: 1.5;
}

C’est du simple bon sens direz-vous, mais il est souvent tentant de styler un nouvel élément sans même regarder si les éléments frères définissent la même chose. Cela se produit également lorsqu’on fait un copier/coller de styles d’une autre section ou lorsqu’on récupère des bouts de code trouvés sur le web. La refactorisation prendra un tout petit peu plus de temps mais votre CSS sera bien plus sain.

Stylez les branches, pas chaque feuille !

Astuce 2 :

Certaines propriétés doivent être stylées de manière combinée.

Un bon exemple de cela est le combo color et background-color. Sauf s’il ne s’agit que d’ajustements mineurs, c’est généralement une bonne idée de les modifier ensemble. Lorsqu’on ajoute une couleur d’arrière-plan à un élément, il peut ne contenir aucun texte, toutefois il est très probable qu’un élément enfant en contiendra. Par conséquent, si nous définissons les couleurs d’arrière-plan et de premier plan ensemble, nous pouvons être sûrs que nous n’aurons jamais de problèmes de lisibilité ou de contraste. De plus, si nous changeons la couleur d’arrière-plan, nous n’avons pas à faire la chasse à toutes les couleurs de texte qui doivent être modifiées, elles sont là, au même endroit.

image
Capture d’écran de Colorable

Astuce 3 :

Utilisez des valeurs “dynamiques”, comme currentColor et em.

Parfois il est plus malin d’utiliser la color du texte pour d’autre propriétés. Par exemple, pour border, pour bow-shadow ou pour le fill des icônes SVG. Au lieu de les définir directement, vous pouvez utiliser currentColor et ce sera la même propriété color. Et comme color hérite par défaut, vous pourriez même n’avoir à le changer qu’à un seul endroit.

De la même manière, les em sont mappés à font-size et vous permettent de redimensionner ce que vous voulez, simplement en modifiant la font size de :root.

image

Astuce 4 :

Écrasez les styles user-agent pour qu’ils héritent de leurs parents.

Des contrôles de formulaires comme les boutons, ou les inputs sont stylés par le navigateur d’une certaine façon. On peut les écraser avec inherit pour qu’ils s’adaptent à votre style.

//CSS
button,  
input,  
select,  
textarea {  
    color: inherit;
    font-family: inherit;
    font-style: inherit;
    font-weight: inherit;
}

L’exemple ci-dessus est repris de sanitize.css
normalize.css fait la même chose, donc si vous avez l’un des deux, vous êtes couverts.

Vous pouvez également essayer de restyler d’autres inputs comme des curseurs, des boutons radio, des cases à cocher, etc. Et comme nous l’avons vu ci-dessus, en utilisant currentColor on leur donne automatiquement la propriété color. On peut les faire passer d’un thème lumineux à un thème sombre sans avoir rien d’autre à changer.

image

Conclusion

Tout cela est très cool, mais à qui est-ce que cela s’adresse ? Bien sûr, ce n’est pas adapté à toutes les situations. Je dirais que les sites web simples en seront les premiers bénéficiaires. Mais même lorsqu’on utilise un préprocesseur, ça ne fait pas de mal de réduire encore un peu la quantité de CSS produite, voire d’éviter de créer certaines variables.

Cela s’accorde bien aussi à l’approche “une classe pour chaque objectif” de Tachyons. Cela peut aider à réduire la complexité et le nombre de classes nécessaires.

Un autre intérêt pourrait apparaître avec les propriétés personnalisés, autrement dit les variables CSS. Contrairement aux variables utilisées dans les préprocesseurs, lorsqu’on écrase une propriété personnalisée cela n’affecte que la portée (scope) du sélecteur courant. Donc, dans un certain sens ce seront des “variables en cascade”. Mais il faut que je vois ça de plus près en pratique.

PS : il est possible que cet article ait été inspiré par ce tweet de Kaelig.


Intéressé par CSS ? Retrouvez une liste des meilleurs articles et ressources du web.

Tous les articles sur CSS parus dans la Cascade.

Articles sur les mêmes thèmes dans la Cascade :

Un CSS concis avec currentColor, par Osvaldas Valutis
La première variable CSS, currentColor, par Dudley Storey



original paru le dans le blog de Simurai.

Sur l’auteur : est né en Suisse et a vécu à Vancouver (Canada), Fukuoka (Japon), Haarlem (Pays-Bas). Il habite maintenant à Sapporo au Japon. Il travaille en indépendant comme front-end designer. On peut le suivre sur Twitter, Dribbble, CodePen.

Traduit avec l’aimable autorisation de l’auteur.
Copyright Simurai © 2015.