Question: quelles sont les considérations pratiques pour la syntaxe dans les valeurs class
et id
?
Notez que je ne pose pas de questions sur la sémantique, c'est-à-dire les mots réels qui sont utilisés, comme par exemple décrit dans cet article de blog . Il y a déjà beaucoup de ressources de ce côté des conventions de nommage, obscurcissant en fait ma recherche d'informations pratiques sur les différents syntaxiques bits: casing, utilisation de l'interponction (en particulier le -
tiret), des caractères spécifiques à utiliser ou à éviter, etc.
Pour résumer les raisons pour lesquelles je pose cette question:
Certaines des conventions que j'ai envisagées d'utiliser:
UpperCamelCase
, principalement comme habitude croisée du codage côté serveurlowerCamelCase
, pour cohérence avec conventions de dénomination JavaScriptcss-style-classes
, ce qui est cohérent avec la dénomination des propriétés css (mais peut être ennuyeux lorsque Ctrl + Shift + ArrowKey sélection du texte)with_under_scores
, que je n'ai personnellement pas vu beaucoup utiliséalllowercase
, simple à retenir mais peut être difficile à lire pour les noms plus longsUPPERCASEFTW
, comme un excellent moyen d'agacer vos collègues programmeurs (peut-être combiné avec l'option 4 pour la lisibilité)Et j'ai probablement laissé de côté certaines options ou combinaisons importantes. Alors: quelles considérations y a-t-il pour nommer les conventions, et à quelle convention mènent-elles?
Bounty ou non, dans une certaine mesure, le choix sera toujours une "question de préférence" - après tout, comment vous sentiriez-vous si le W3C recommandait (ou même imposait) une certaine convention que vous ne jugiez pas correcte?
Cela dit, cependant, je préfère personnellement la convention lowerCamelCase
, et je donnerai les raisons et les considérations pratiques que j'ai utilisées pour me décider - je le ferai par un processus d'élimination, en utilisant la numérotation de votre question:
(5.) n'est pas facilement lisible car vous ne savez pas où commencer.
(6.) ASABOVEPLUSITSANNOYINGLIKESOMEONESHOUTTING.
(4.) historic_incompatibility_plus_see: Documentation Mozilla Dev .
(3.) un peu plus compliqué à expliquer ... comme vous le mentionnez, la sélectionnabilité dans les éditeurs de texte est un problème (comme avec les traits de soulignement, selon l'éditeur), mais pour moi, c'est aussi le fait que cela me rappelle la syntaxe réservée à mots clés spécifiques au fournisseur , même si ceux-ci commencent par un tiret ainsi que par des mots séparés par eux.
Donc, cela laisse votre (1.) et (2.), UpperCamelCase et lowerCamelCase, respectivement. Malgré le lien mental avec les classes Java (qui sont, par une convention plus clairement définie, UpperCamelCase), classe CSS les noms me semblent être mieux en commençant par une lettre minuscule. C'est peut-être à cause de élément XHTML et noms d'attribut , mais je suppose que vous pourriez également faire valoir que le fait d'avoir des classes CSS utilise UpperCamelCase Si vous avez besoin d'une autre raison, lowerCamelCase est ce que le W3C utilise dans exemples de bons noms de classe (bien que l'URL elle-même, ennuyeusement, soit en désaccord avec moi).
Je déconseille (4.), (5.) et (6.), pour les raisons indiquées ci-dessus, mais je suppose que des arguments pourraient être avancés pour l'un ou l'autre des trois autres.
Que vous (ou quelqu'un d'autre d'ailleurs) soyez d'accord avec moi sur cette question dépend de vous. Le fait que vous n'ayez pas de réponse définitive citant des sources faisant autorité peut être considéré comme un indice qu'il n'est pas une telle chose comme un standard précis sur ce problème (sinon nous l'utiliserions tous). Je ne suis pas sûr que ce soit nécessairement une mauvaise chose.
Les mots dans les noms de classe CSS doivent être séparés par des tirets (class-name
), car c'est ainsi que les mots dans les propriétés CSS et pseudo-classes sont séparés et leur syntaxe est définie par le spécifications CSS .
Les mots dans les noms d'ID doivent également être séparés par des tirets, pour correspondre au style syntaxique des noms de classe et parce que les noms d'ID sont souvent utilisés dans les URL et le tiret est le séparateur de mots original et le plus courant dans les URL.
C'est surtout une question de préférence; il n'existe aucune norme établie, et encore moins une source faisant autorité, en la matière. Utilisez ce qui vous convient le mieux; soyez juste cohérent.
Personnellement, j'utilise css-style-with-dashes
, Mais j'essaie d'éviter les noms de classe multi-Word et d'utiliser plusieurs classes autant que possible (donc button important default
Plutôt que button-important-default
). D'après mon expérience, cela semble également être le choix le plus populaire parmi les sites Web et les cadres de haute qualité.
Les minuscules avec des tirets sont également plus faciles à taper que les autres options (à l'exception de la convention nowordseparatorswhatsoever
difficile à lire), au moins sur les claviers américains, car cela ne nécessite pas l'utilisation de la touche Maj.
Pour les identifiants, il y a la considération pratique supplémentaire que si vous voulez référencer les éléments par leur ID directement en javascript (par exemple document.forms[0].btn_ok
), Les tirets ne fonctionneront pas si bien - mais alors, si vous utilisez jQuery, vous allez probablement les utiliser via $()
de toute façon, donc vous pouvez simplement avoir $('#btn-ok')
, ce qui rend ce point principalement théorique.
Pour mémoire, une autre convention que je rencontre utilise régulièrement des verrues hongroises dans les identifiants pour indiquer le type d'élément, en particulier pour les contrôles de formulaire - vous auriez donc #lblUsername
, #tbUsername
, #valUsername
pour le nom d'utilisateur, l'entrée et le validateur.
Je crois fermement que ce qui importe le plus, c'est la cohérence.
Il y a deux façons de regarder ceci:
Un bon argument peut être fait pour alllowercase
ou css-style-clauses
(probablement le meilleur choix) car ils seront les plus cohérents avec le code dans lequel ils se trouveront. Cela donnera un flux plus naturel au code dans son ensemble et rien ne sera discordant ou déplacé.
Un argument tout aussi valable peut être avancé pour un style distinct des noms de balises HTML ou des clauses CSS, s'il différencie les ID et les classes de manière à faciliter la lisibilité. Par exemple, si vous avez utilisé UpperCamelCase
pour les ID et les classes, et que vous ne l'avez utilisé pour aucune autre construction ou fin, vous sauriez que vous en avez rencontré une à chaque fois que vous avez vu un jeton dans ce format. Une restriction que cela pourrait imposer est qu'il serait plus efficace si chaque ID ou classe était un nom de mot 2+, mais c'est raisonnable dans de nombreux cas.
En écrivant cette réponse, je me suis rendu compte que je suis beaucoup plus enclin au deuxième choix, mais je vais laisser les deux parce que je pense que les deux cas ont du mérite.