J'ai quelques divs:
<div class="A">"Target"</div>
<div class="A B">"NotMyTarget"</div>
<div class="A C">"NotMyTarget"</div>
<div class="A D">"NotMyTarget"</div>
<div class="A E">"NotMyTarget"</div>
Existe-t-il un sélecteur CSS qui me fournira le div contenant Target
mais pas les div contenant NotMyTarget
?
La solution doit fonctionner sur IE7, IE8, Safari, Chrome et Firefox
Edit: Jusqu'à présent, Nick est le plus proche. C'est maladroit et je n'aime pas la solution, mais au moins ça marche:
.A
{
/* style that all divs will take */
}
div.B
{
/* style that will override style .A */
}
Vous pouvez utiliser le sélecteur d'attributs pour faire correspondre le div
qui n'a qu'une seule classe:
div[class=A] {
background: 1px solid #0f0;
}
Si vous souhaitez sélectionner un autre div
qui a plusieurs classes, utilisez des guillemets:
div[class="A C"] {
background: 1px solid #00f;
}
Certains navigateurs ne prennent pas en charge la syntaxe du sélecteur d'attributs. Comme d'habitude, "certains navigateurs" est un euphémisme pour IE 6 et plus.
Voir aussi: http://www.quirksmode.org/css/selector_attribute.html
Exemple complet:
<!DOCTYPE html>
<html>
<head>
<style>
.A { font-size:22px; }
.B { font-weight: bold; border: 1px solid blue; }
.C { color: green; }
div[class="A"] {
border: 1px solid red;
}
div[class="A B"] {
border: 3px solid green;
}
</style>
</head>
<body>
<div class="A">"Target"</div>
<div class="A B">"NotMyTarget"</div>
<div class="A C">"NotMyTarget"</div>
<div class="A D">"NotMyTarget"</div>
<div class="A E">"NotMyTarget"</div>
</body>
</html>
EDIT 2014-02-21: Quatre ans plus tard, :not
est maintenant largement disponible, bien que détaillé dans ce cas spécifique:
.A:not(.B):not(.C):not(.D):not(.E) {
border: 1px solid red;
}
Malheureusement, cela ne fonctionne pas dans IE 7–8 comme spécifié dans la question: http://caniuse.com/#search=:not
.A:not(.B) {}
Mais devinez qui ne supporte pas ça ... En effet, IE <= 8.
Je pense que le mieux que vous puissiez faire (jusqu'à CSS 3) est de remplacer les styles dans ce cas par ce que vous ne voulez pas de la classe A B
dans A
, comme ceci:
.A.B { /* Styles */ }
.A { /* Reverse any styling you don't want */ }