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.