280 votes

Comment combiner classe et ID dans un sélecteur CSS ?

Si j'ai la division suivante :

<div class="sectionA" id="content">
    Lorem Ipsum...
</div>

Existe-t-il un moyen de définir un style qui exprime l'idée "Une div avec id='content' ET class='myClass' " ?

Ou faut-il simplement aller dans un sens ou dans l'autre comme dans

<div class="content-sectionA">
    Lorem Ipsum...
</div>

Ou

<div id="content-sectionA">
    Lorem Ipsum...
</div>

3 votes

Si vous allez sélectionner par id, il n'est pas nécessaire de sélectionner par classe aussi, parce que l'id est unique, donc un seul élément correspondra. L'ajout de la classe au même sélecteur n'est donc qu'une saisie supplémentaire.

24 votes

@TStamper : Pas nécessairement. Vous ne pensez qu'en termes de documents statiques. Par exemple, vous pouvez avoir un img#Inbox sur votre page qui est normalement réglé sur une opacité de 50 %. Cependant, lorsque l'utilisateur a un message, vous souhaitez que l'icône soit opacifiée à 100 %, et le backend l'indique en ajoutant une icône active à l'élément. Dans un tel scénario, il est judicieux d'avoir un sélecteur qui combine à la fois l'ID et le nom de classe.

0 votes

@TStamper : De plus, le fait d'avoir le sélecteur combiné id+class plus spécifique ne lui donne-t-il pas plus de poids/préférence que la version id seule ? AFAIK, cela devrait. (Autrement dit, les règles du sélecteur combiné id+class l'emportent sur celles du sélecteur combiné id. (C'est la raison/le besoin pour lequel j'ai trouvé ce fil de discussion à l'instant).

413voto

ajm Points 8631

Dans votre feuille de style :

div#content.myClass

Edit : Ceux-ci pourraient aider, aussi :

div#content.myClass.aSecondClass.aThirdClass /* Won't work in IE6, but valid */
div.firstClass.secondClass /* ditto */

et, selon votre exemple :

div#content.sectionA

Edit, 4 ans plus tard : Puisque c'est super vieux et que les gens continuent à le trouver : Ne le fais pas. utilisez les noms de balises dans vos sélecteurs. #content.myClass est plus rapide que div#content.myClass car le tagName ajoute une étape de filtrage dont vous n'avez pas besoin. N'utilisez les noms de balises dans les sélecteurs que lorsque cela est nécessaire !

34 votes

Préciser que l'ID appartient à un div ne peut que nuire aux performances de rendu (bien qu'assez négligeables) sans aucun avantage pour lui puisqu'un ID est déjà unique. Je choisirais plutôt #content.myClass pour que ce soit plus propre.

3 votes

div.class#id devrait être équivalent bien que moins recommandé ; utilisez d'abord les parties les plus uniques du sélecteur.

1 votes

Merci pour vos efforts, même après des années :). Tu aides toujours des gars comme moi. Je viens de l'utiliser pour mon projet. Upvoted pour sûr.

5voto

mystrdat Points 975

Une combinaison d'ID et de classe est parfaitement adaptée et très pratique pour styliser les applications 2.0 et leurs styles basés sur le comportement. Les commentaires du type "vous ne devriez pas avoir besoin de le faire" ne sont pas pertinents.

5voto

Blixt Points 23266

En général, vous ne devriez pas avoir besoin de classer un élément spécifié par id, car id est toujours unique, mais si vous en avez vraiment besoin, ce qui suit devrait fonctionner :

div#content.sectionA {
    /* ... */
}

5voto

Gabriel Hurley Points 17079

Il n'y a rien de mal à combiner un id et une classe sur un élément, mais vous ne devriez pas avoir besoin de l'identifier par les deux pour une seule règle. Si vous le voulez vraiment, vous pouvez le faire :

#content.sectionA{some rules}

Vous n'avez pas besoin de la div devant l'ID comme d'autres l'ont suggéré.

En général, les règles CSS spécifiques à cet élément doivent être définies avec l'ID, et elles auront plus de poids que celles de la classe. Les règles spécifiées par la classe sont des propriétés qui s'appliquent à plusieurs éléments et que vous ne souhaitez pas modifier à plusieurs endroits à chaque fois que vous avez besoin de les ajuster.

Cela se résume à ceci :

 .sectionA{some general rules here}
 #content{specific rules, and overrides for things in .sectionA}

C'est logique ?

0voto

Eric Wendelin Points 13805

Vous puede combiner l'ID et la classe en CSS, mais les ID sont censés être uniques, et l'ajout d'une classe à un sélecteur CSS le surqualifierait.

0 votes

C'est un bon point. Je pense que si vous avez un ensemble de classes très générales (définissant des choses comme le flottant, la hauteur/largeur, peut-être des choses comme la police) et que vous aimeriez remplacer quelque chose dans ces classes dans cette exception unique ?

5 votes

À moins que vous n'utilisiez la même feuille de style pour différentes pages :-)

5 votes

Autre exemple : lorsque les classes sont ajoutées dynamiquement avec Javascript (#optionalFields.enabled)

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