62 votes

Conventions de dénomination HTML pour l'ID, la classe et pour inclure le préfixe du type d'élément ?

Quelqu'un connaît-il une bonne ressource qui explique les bonnes conventions de dénomination pour les ID et les classes HTML et qui indique s'il faut préfixer les ID avec un type d'élément, par exemple btn ou button ou similaire ?

Les classes doivent-elles être au pluriel ou au singulier ? Je comprends que les identifiants doivent être au singulier car ils sont uniques, mais qu'en est-il des classes ?

Les identifiants et les classes doivent utiliser des noms, non ?

J'utilise des pages qui injectent d'autres pages dans les pages existantes, un peu comme des pages partielles... donc.... Je me demandais si quelqu'un avait préfixé un nom devant les ID et/ou les classes ... un peu comme un espace de nom ou similaire ?

Nous vous remercions de vos commentaires et de vos suggestions.

77voto

Adrien Be Points 1462

2014 : une réponse nouvelle, axée sur les systèmes de dénomination existants

Quelle que soit la convention que vous choisissez, je vous suggère de choisir des exigences qui ciblent les besoins de votre projet.

À savoir : votre projet est-il petit ou énorme ? Votre projet va-t-il être réutilisé ou doit-il gérer une sorte de thématisation ? Les développeurs qui travaillent sur les CSS/HTML sont-ils suffisamment enthousiastes ou expérimentés pour respecter les conventions ? etc.


Exigences communes :

  • la dénomination de gauche à droite, du plus générique au plus précis, telle que comme btn-bluetheme-create-accnt o accordion-modrnlook-userlist
  • le nom d'une classe ou d'un identifiant doit toujours être suffisamment précis pour être recherché dans l'ensemble d'un projet et ne renvoyer que les résultats pertinents.
  • les noms doivent être intuitifs et significatifs
  • n'abrégez PAS les noms, sauf s'il s'agit d'une abréviation très connue (par exemple, msg pour message, accnt pour compte).
  • permettre une hiérarchie structurelle (c'est-à-dire la convention BEM)
  • utiliser - o _ ou camelCase dans les noms ? probablement subjectif (opinion des développeurs) et dépendant des langues de clavier utilisées

Comme nous l'avons vu, vous pouvez envisager d'utiliser Structural naming convention OU/ET Presentational naming convention (ou peaux). Je préférerais l'aspect structurel dans l'ensemble, mais il y a toujours des cas où cela est nécessaire (par exemple, il n'est pas rare d'utiliser différents styles de boutons sur un même site web et il peut être pratique/tentant de les nommer comme suit btn-dark & btn-light ).


Conventions connues :

Convention de dénomination structurelle : nomme la classe de l'élément en décrivant ce qu'il est, plutôt que de dire où il se trouve ou à quoi il ressemble. Voir les exemples ci-dessous.

.page-container
     .page-wrap-header-n-content
     .page-header
          .branding-logo
          .branding-tagline
          .wrapper-search
          .page-nav-main
     .page-main-content
     .page-secondary-content
          .nav-supplementary
     .page-footer
          .site-info

Convention de dénomination de présentation : nomme la classe de l'élément en décrivant son emplacement et/ou son apparence. Voir les exemples ci-dessous.

.theme-ocean-blue
.skin-red-tango

Convention de dénomination BEM : signifie "Bloc, élément, modificateur". La syntaxe est telle que <module-name>__<sub-module-name>--<modifier-or-state> . Le bloc est le conteneur "principal", une sorte de module/composant, quel que soit le nom qu'on lui donne. Element est juste un composant enfant du composant principal (le Block). Modifier est une sorte d'état. Particularités : la syntaxe (utilisation de dbl underscore & dbl dash), & les éléments enfants doivent contenir le nom du composant le plus proche.

Convention de dénomination de l'OCSS : signifie CSS orienté objet. Utilise des skins à des fins de stratégie de marque ou de cohérence de la conception (par exemple, couleur du fond, couleur de la bordure, ...). Abstraite les styles structurels. Et plus encore (je dois encore me pencher sur cette convention moi-même). Exemple de style structurel abstrait ci-dessous.

 .globalwidth {
      width: 980px;        /* fixed width */
      margin: 0 auto;     /* Centering using margin: auto */
      position: relative;  /* Relative positioning to create a positioning context for child elements */
      padding-left: 20px;
      padding-right: 20px;
      overflow: hidden;  /* Overflow set to "hidden" for clearfixing */
 }

Ressources :

22voto

Christophe Eblé Points 4606

20voto

rpflo Points 5861

Beaucoup de gens ne réalisent pas que tu peux faire ce genre de choses :

.awesome {
 /* rules for anything awesome */
}

div.awesome {
 /* rules for only awesome divs */
}

button.awesome {
 /* rules for any awesome buttons, but not awesome divs */
}

div.awesome h1 {
 /* rules for H1s inside of any div.awesome */
}

div.awesome>button {
 /* rules for immediate children buttons (not grandchildren+) of div.awesomes */
}

11voto

alex Points 186293

Je ne préfixerais pas le type, car vous pouvez le déduire dans le sélecteur si vous le souhaitez.

form#contact {
    property: value;

}

La méthode que vous avez décrite est connue sous le nom de notation hongroise, et n'est pas très populaire.

Pour ce que vous mentionnez, vous pourriez placer votre HTML injecté à l'intérieur d'un div avec une classe/id unique, qui a une sorte de réinitialisation localisée. Consultez la spécificité des sélecteurs CSS pour vous assurer que vos règles seront appliquées et non d'autres règles dans le CSS de la page hôte. Voir cette réponse à une question similaire concernant le style d'un élément dans une page parent.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X