Closed YannisDelmas closed 1 year ago
C'est un sujet assez délicat :)
Dans ce qu'on peut recommander, il y aura un parti pris minimum : nommage sémantique ou non (nommage utilitaire par exemple).
J'aimerais qu'on recommande un nommage sémantique, rien que pour le principe de separation of concerns (https://www.w3.org/TR/html-design-principles/#separation-of-concerns), étant donné qu'un nommage utilitaire (ex: mt-3 text-red
va à l'encontre de ce principe (et du bon sens, selon moi 🙄).
En ce qui concerne les méthodos de nommage sémantique (BEM, OOCSS, etc), on peut les mentionner, mais ce n'est pas quelque chose qu'on peut vraiment recommander dans le cadre de ce projet : c'est pratique pour la production, ce n'est pas indispensable pour faire du code propre, je pense.
Concernant l'utilisation des attributs dans les sélecteurs, je suis d'accord avec toi, le seul argument que j'aurais contre, c'est que je ne les utilise jamais en production (parce que si quelqu'un reprend le code, je ne suis pas sûr qu'il comprenne ce genre de sélecteurs). Mais la prod, c'est la prod et dans l'absolu, se baser sur des attributs (et leurs valeurs) permet plus de généricité et ça me semble être quelque chose à privilégier dans le cadre de ce projet.
Je suis d'accord sur le fait d'éviter le nommage non-sémantique. Dans certains cas quelque chose de sémantique peut toutefois avoir une dimension utilitaire. Mon idée est surtout d'utiliser les mécaniques déjà existantes (rel
, role
, balise, etc.) avant de créer des classes. Je suis d'accord que tout le monde ne les comprend pas forcément bien, mais j'aurais tendance à dire que c'est faute d'habitude. On peut peut-être limiter notre recommandation aux attributs les plus usuels: rel
, ARIA et les attributs binaires standards (open
, readonly
, etc.)?
Quand on crée une classe, doit-elle désigner une (sous-)catégorie (p.ex. "encart" pour préciser aside
), une qualité (p.ex. "mis en valeur" ou "nom de personne") ou un état (ouvert/fermé, tag choisi, sélectionné, etc.)? L'idée serait de s'efforcer de se limiter à ces trois options. Le premier type de classes est une sorte d'extension des balises existantes et correspondrait à un "nom commun" dans la métaphore linguistique. Le second rejoint la logique des microformats et correspondrait à un adjectif / complément du nom. Le troisième type est un cas particulier du 2e, mais il est intéressant de le distinguer parce qu'il correspond à une évolution du CSS en cours de discussion.
Concernant les méthodologies de nommage sémantique, j'ai la même appréciation que toi.
Sur la question de la casse pour les identifiants : https://stackoverflow.com/questions/17967371/are-property-values-in-css-case-sensitive/26860699
@enguerranws J'ai l'impression que nos échanges sont stabilisés. Je vais basculer ça dans la catégorie "en cours": j'ai vu trop d'erreurs dans les projets des M1 web éditorial le semestre dernier! 😱 Je te ferai une proposition de rédaction quand je trouverai un moment.
En fait, ce que tu proposes est assez similaire à l'implémentation CSS du Système de design de l'État : le statut d'un bouton par exemple, dépend de ses attributs (disabled, etc.) et les sélecteurs CSS se basent dessus (.fr-btn[disabled]
, par ex).
C'est heureux qu'ils s'appuient sur des bonnes pratiques 😊 En revanche, je n'ai pas trouvé de doctrine à ce propos dans leurs documents, seulement des exemples de codes.
Non, ce n'est pas documenté... Mais de fait, je l'ai constaté à l'utilisation.
J'ai commencé à rédiger… Pas si simple à faire : il y a pas mal de choses à dire, tout en utilisant une formulation simple à comprendre. Je m'y efforce, en tout cas.
@enguerranws J'ai fini une première rédaction complète. J'ai été assez limitatif sur la règle 5. C'est peut-être là qu'il y aura à revoir. En tout cas, ça va m'obliger à revoir quelques corrigés pour être plus rigoureux 😮 Peux-tu, s'il te plaît y jeter un œil?
@YannisDelmas Je ne retrouve pas la branche concernée et le fichier, tu peux m'en faire un lien ?
@enguerranws C'est la branche associée à cette issue 😉 : https://github.com/YannisDelmas/beau-code-web/tree/proposition/css-selecteurs, le fichier correspondant est guide-style-030-selecteurs.twig
Désolé, je ne la retrouvais pas du tout, j'ai les yeux fatigués aujourd'hui :/
Je viens de tout relire : sur la forme, ça me semble à la fois clair et structuré d'une façon (quasiment comme un arbre de décision) que je trouve très pratique à lire et à partager. Sur le fond, tout y est. Je suis assez impatient de pouvoir y faire référence, ça va m'épargner du temps :D
Concernant la règle 5, on pourrait peut être rendre explicite le fait que le rendu graphique d'un élément ne devrait pas être considéré comme une source de nommage : en terme de maintenance, le rendu des éléments de l'interface est sujet à évolution, et le fait de faire référence à des aspects graphiques dans un nom de classe empêche ces évolutions (enfin, il faut tout renommer quoi). Par contre, je ne sais pas si le fait de l'ajouter rend les choses plus claires ou plus confuses...
nommage des classes HTML : classes de catégories, classes de qualité, classes d'état (attributs pour les autres propriétés)
bien utiliser les attributs ARIA quand ils existent (à lister). Le HTML (v5.2) ne retient pas les microformats dans le standard, mais le signalent comme une "extension" (§1.7.3). On pourrait le voir également comme une application.
Exemple des autoliens:
self-link
enclass
est correct, mais commebookmark
existe enrel
, autant l'utiliser. Le sélecteur CSS est moins élémentaire ([rel~=bookmark]
au lieu de.self-link
), mais le code HTML est plus standard/général et ne demande pas qu'on spécifie la sémantique de la classe.