YannisDelmas / beau-code-web

Le beau code web
https://YannisDelmas.github.io/beau-code-web
GNU General Public License v3.0
6 stars 1 forks source link

HTML : nom des classes et attributs #28

Closed YannisDelmas closed 1 year ago

YannisDelmas commented 2 years ago

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 en class est correct, mais comme bookmark existe en rel, 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.

enguerranws commented 2 years 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.

YannisDelmas commented 2 years ago

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.

YannisDelmas commented 1 year ago

Sur la question de la casse pour les identifiants : https://stackoverflow.com/questions/17967371/are-property-values-in-css-case-sensitive/26860699

YannisDelmas commented 1 year ago

@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.

enguerranws commented 1 year ago

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).

YannisDelmas commented 1 year ago

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.

enguerranws commented 1 year ago

Non, ce n'est pas documenté... Mais de fait, je l'ai constaté à l'utilisation.

YannisDelmas commented 1 year ago

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.

YannisDelmas commented 1 year ago

@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?

enguerranws commented 1 year ago

@YannisDelmas Je ne retrouve pas la branche concernée et le fichier, tu peux m'en faire un lien ?

YannisDelmas commented 1 year ago

@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

enguerranws commented 1 year ago

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...