has father child based css css-selectors

father - parent selector css



¿Cómo selecciono un div con clase "A" pero NO con clase "B"? (3)

Tengo algunos 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>

¿Hay un selector de CSS que me proporcione el div que contiene Target pero no los que contienen NotMyTarget ?

La solución debe funcionar en IE7, IE8, Safari, Chrome y Firefox

Edit: Hasta ahora Nick es el más cercano. Es torpe y no me gusta la solución, pero al menos funciona:

.A { /* style that all divs will take */ } div.B { /* style that will override style .A */ }


Creo que lo mejor que puedes hacer (hasta que CSS 3) es anular los estilos en este caso con lo que no quieres de la clase AB en A , como esto:

.A.B { /* Styles */ } .A { /* Reverse any styling you don''t want */ }


Puede usar el selector de atributos para hacer coincidir el div que tiene solo una clase:

div[class=A] { background: 1px solid #0f0; }

Si desea seleccionar otro div que tenga varias clases, use comillas:

div[class="A C"] { background: 1px solid #00f; }

Algunos navegadores no admiten la sintaxis del selector de atributos. Como de costumbre, "algunos navegadores" es un eufemismo para IE 6 y versiones anteriores.

Consulte también: http://www.quirksmode.org/css/selector_attribute.html

Ejemplo completo:

<!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>

EDICIÓN 2014-02-21: Cuatro años después, :not está disponible en la actualidad, aunque sí lo es en este caso específico:

.A:not(.B):not(.C):not(.D):not(.E) { border: 1px solid red; }

Desafortunadamente, esto no funciona en IE 7–8 como se especifica en la pregunta: http://caniuse.com/#search=:not


.A:not(.B) {}

Pero adivina quién no admite eso ... De hecho, IE <= 8.