Comme vous le savez probablement déjà, vous pouvez avoir plusieurs classes sur des éléments séparés par un espace.
<div class="content main"></div>
Et avec CSS, vous pouvez cibler ce div
avec .content
ou .main
. Existe-t-il un moyen de le cibler si et seulement si les deux classes sont présentes?
<div class="content main">I want this div</div>
<div class="content">I don't care about this one</div>
<div class="main">I don't want this</div>
Quel sélecteur CSS devrais-je utiliser pour obtenir le premier div
uniquement (supposons que je ne peux pas utiliser .content:first-child
ou similaire)?
Oui, il suffit de les concaténer: .content.main
. Voir sélecteur de classe CSS .
Mais notez qu'Internet Explorer jusqu'à la version 6 ne prend pas en charge plusieurs sélecteurs de classe et ne fait qu'honorer le dernier nom de classe.
Juste pour le plaisir (je ne vous recommande pas vraiment de faire ça), il y a c'est une autre façon de le faire:
.content[class~="main"] {}
Ou:
.main[class~="content"] {}
Référence: http://www.w3.org/TR/CSS2/selector.html
E [foo ~ = "warning"] Correspond à tout élément E dont la valeur d'attribut "foo" est une liste de valeurs séparées par des espaces , dont l'une est exactement égal à "avertissement"
Démo: http://jsfiddle.net/eXrSg/
Comme IE6 ne prend pas en charge plusieurs classes, nous ne pouvons pas utiliser .content.main
, mais il existe des bibliothèques javascript comme IE-7.js qui activent le sélecteur d'attributs, mais semblent toujours échouer quand il s'agit de plusieurs classes. J'ai testé cette solution de contournement dans IE6 avec javascript activant le sélecteur d'attributs, et c'est moche, mais cela fonctionne.
Je n'ai pas encore trouvé de script permettant à IE6 de prendre en charge plusieurs sélecteurs de classe, mais j'en ai trouvé beaucoup qui activent les sélecteurs d'attributs. Si quelqu'un en connaît un qui fonctionne, merci de me donner un cri dans les commentaires pour que je puisse me débarrasser de cette solution.