Principes directeurs
CSS est un langage de conception graphique, pas un langage de script.
La création CSS doit refléter les modèles, les concepts et les perspectives de conception graphique. Avec des échelles globales (désolé), des « tokens », des règles, etc., vous limitez la répétition et facilitez l’extension future de vos styles graphiques.
Donner aux concepteurs graphiques les moyens d’affiner leur travail de manière autonome est efficace.
Rendre les parties nécessaires du CSS intelligibles aux concepteurs (codeurs ou non !) réduit le stress, le temps et favorise une bonne allocation des ressources humaines. Affiner le design dans le navigateur est un grand vecteur de rentabilité économique.
Toutes les propriétés CSS ne sont pas nées égales.
Les propriétés du modèle de boîte (display, position, width, etc.) sont extrêmement sensibles et potentiellement bien plus perturbatrices que, disons, la couleur ou la typographie. Les premiers appartiennent aux auteurs CSS professionnels et les seconds sont ceux que les concepteurs devraient pouvoir utiliser, modifier et expérimenter en contexte.
Les propriétés et les unités ont des rôles et une utilisation spécifiques.
Limiter leur utilisation à ces rôles améliore la clarté et favorise la cohérence ainsi que la prévisibilité. Il en va de même pour les unités. Certaines suggèrent de la typographie, d’autres des images ou du rythme. Utilisez-les intentionnellement et rationnellement pour communiquer du sens.
Les composants et les modèles ont besoin d’une structure.
Essayer de l’abstraire est vain. Au lieu de cela, la documentation et la diligence sont essentielles. Le HTML est sémantiquement riche, alors choisissez les bonnes balises et évitez de les modifier pour des raisons superficielles. On ne supprimerait ou ne modifierait pas class="header" sans d’abord comprendre son objectif, et il ne faut pas non plus modifier ou supprimer <header></header> sur un coup de tête.
Les sélecteurs CSS sont des véhicules d’intention.
Chaque particule de sélection doit avoir un but et sinon, elle doit être éliminée. Ce div étranger dans .card div h2 est ce qui rend le CSS fragile. Ce ne sont pas les “meilleures pratiques”.
Les types de sélecteurs ont tous une fonction.
Chacun d’eux peut être utile dans un certain contexte. Aucune règle d’usage absolue ne doit être édictée. Ce n’est pas « toujours » ou « jamais » mais « ça dépend » et « pourquoi ». Les règles absolues corrompent absolument. Ou quelque chose comme ça…
La spécificité doit être exploitée et non rejetée.
Néanmoins, « toujours » (hum) la garder aussi basse que possible. Oui, en 2015, cela n’était peut-être pas facile. Mais nous sommes en 2023 et de nouvelles fonctionnalités sont désormais largement prises en charge. Utilisez-les.
La portée globale en CSS n’est pas un péché.
N’oubliez pas que CSS est un langage de conception graphique et que sa portée globale s’intègre parfaitement dans l’approche dimensionnelle fondamentalement stratifiée de la conception graphique. Les meilleures pratiques de programmation ne correspondent pas nécessairement aux meilleures pratiques de conception graphique. Adoptez les meilleures pratiques de conception graphique.
Les règles de conception globales doivent être en grande partie anonymes.
Seulement quelques déclarations par ensemble de règles uniquement. Nous parlons de rythme, de typographie, de couleur ; pas display ou position. C’est ça, le moyen de limiter la répétition, les ballonnements et la complexité.
Il faut attendre qu’un concept soit bien compris avant de le nommer.
En attendant, utilisez des éléments HTML. L’abstraction prématurée ou “résoudre des problèmes pas encore rencontrés” sont des problèmes plus importants que l’utilisation de header en CSS. Oui, ce sont les meilleures pratiques de programmation. Mais qui vous a dit que le développement CSS était purement de la conception graphique ?
Lorsque plus de 3 règles sont répétées plus de 3 fois, un concept apparaît.
Les règles devraient ensuite être centralisées en nommant et en utilisant ledit concept au lieu des règles simples. La réutilisabilité, l’expressivité et la simplicité s’en trouvent alors grandement améliorées.
Les concepts nommés doivent être autonomes et autosuffisants.
Les concepts nommés ne doivent pas être définis à l’intérieur d’un autre concept nommé. Si jamais cela est nécessaire, le concept enfant doit être interne au concept parent et ne doit pas être réutilisé ailleurs.
La manipulation de concepts nommés dans plusieurs fichiers est strictement interdite.
Toutes les règles d’un concept nommé doivent résider dans le même fichier CSS unique. Pour que les auteurs et les responsables aient confiance dans le système, il doit exister une seule source de vérité pour tout concept.
Les concepts « enfants » reliés à l’état, les variantes ou la structure doivent être dotés d’un préfixe.
Ces concepts peuvent être représentés sous forme de classes enfants ou combinées. Ne jamais utiliser ces classes seules, mais toujours en complément du concept parent. Oui, voici « jamais » et « toujours » dans la même phrase. “Double jeopardy, we are fine” dirait un grand gestionnaire.
Les classes avec préfixe doivent généralement être implémentées avec des sélecteurs réduisant la spécificité.
Sauf nécessité contraire, il faut s’efforcer de maintenir la spécificité à 21 ou moins. Avec une préférence autour de 10 à 12. Il faut ici utiliser des pseudo-sélecteurs modernes et largement supportés.
On ne trouvera peut-être pas au premier abord la manière efficace de sélectionner les éléments d’interface.
L’intention peut ne pas être claire au début du travail de stylisation. Au lieu d’essayer et d’essayer en vain, un fichier de code « quarantaine » doit être utilisé temporairement jusqu’à ce que la bonne sélection se manifeste. Toutefois, aucun fichier de quarantaine ne devrait jamais être publié publiquement « en production ».
Le HTML doit être aussi simple et expressif que possible.
Évitez de « sur-contenir », n’utilisez pas <div> là où vous pourriez utiliser <aside>. N’enveloppez pas votre navigation à un seul niveau dans des listes à puces. Et oui, une navigation simple est accessible. « Keep it simple… Suzy », qu’ils disent en anglais.
Tout élément HTML ne doit assumer qu’un seul rôle.
Conformément à la célèbre meilleure pratique de programmation (encore une fois, la programmation dans la conception), les balises sémantiques sont pour… la sémantique tandis que <div> ou <span> sont destinées à la division graphique ou logique. Tout type de grille devrait être implémenté avec les balises <div>.
Toute adaptation de @media doit être incluse dans le fichier de son concept associé.
Pas sous forme de fichier séparé, ni sous forme de classes suffixées. Si l’on utilise des classes utilitaires, les règles fournies ne doivent pas dépendre de la requête mais plutôt être universellement nécessaires, dans chaque configuration média.
Des feuilles de style entières sont mieux utilisées lorsqu’elles sont globales.
Les requêtes @media devraient être utilisées dans les balises HTML <link> pour des considérations de réutilisation, de performance et d’optimisation. Chaque couche de fondamentale conception graphique devrait être autonome, indépendante et amovible.
Le style des composants ne doit être servi qu’avec des composants actifs.
Pas sous la forme d’un gros fichier minifié dans la balise <head> du document. De cette façon, le fameux problème du chargement de code CSS inutilisé est pratiquement résolu, sans aucune dette technologique. Le premier rendu est également plus rapide puisque seul ce qui est utilisé dans la fenêtre est traité par le navigateur. En prime, vous obtenez le chemin du fichier CSS dans le fichier du composant.
Laissez le navigateur faire autant de travail de rendu que possible.
En adoptant la fluidité, l’adaptabilité est principalement assurée par le navigateur. Moins de règles sont nécessaires pour assurer un rendu correct dans le nombre infini de contextes d’utilisation.
Utilisez pleinement les outils de développement disponibles gratuitement en suivant le grain de la plateforme Web.
En utilisant des ensembles de règles « juste à temps », des « tokens » de conception, la cascade et la sélection intentionnelle, le flux de travail de débogage et d’affinage est plus simple, plus léger et plus clair. Les « devtools » sont nos amis !
Éviter les abstractions technologiques telles que les « frameworks » de haut niveau favorisent un code natif plus léger et plus simple.
En écrivant du CSS natif, on utilise mieux le CSS ; en écrivant du HTML natif, on utilise mieux le HTML. Meilleur CSS et meilleur HTML produisent une meilleure expérience utilisateur.