¿Cómo crear una regla CSS para todos los elementos excepto una clase?

95

He creado una hoja de estilo CSS para mi proyecto. ¿Hay alguna forma de que pueda crear una regla CSS que se aplique a todos los elementos de la tabla EXCEPTO los elementos de la tabla que pertenecen a la clase "dojoxGrid"? Algo como:

.not(dojoxGrid) table{
    width:100%;
    border-top:1px solid #dddddd;
    border-left:1px solid #dddddd;
    border-right:1px solid #dddddd;
    margin:1em auto;
    border-collapse:collapse;
}
Mella
fuente
¿Necesita que esto funcione en varios navegadores? Los navegadores tienen un soporte diferente para los selectores CSS más flexibles. Podría ser algo que podría hacer en un script si es absolutamente necesario y debe ser entre navegadores.
kibibu
sí, lo necesito para que funcione en los principales navegadores. ¿Hay alguna otra forma de lograrlo en lugar de a través de un script? aplausos
Nick
El enfoque de Cori funcionará en los navegadores desde ie4, tal vez antes.
kibibu

Respuestas:

183

La pseudoclase de negación parece ser lo que está buscando.

table:not(.dojoxGrid) {color:red;}

Sin embargo, no es compatible con ≤ IE8 .

Knu
fuente
2
es un buen selector de css3 a tener en cuenta, con suerte utilizable en IE9.
Cori
4
Si bien mi comentario no es directamente aplicable a la pregunta, vale la pena señalar que :notPUEDE usarse como selector de jquery. es decir $("[data-name='bob']:not(a)"), que es bueno.
Gingerbreadboy
3
Esta debería ser la respuesta aceptada, porque es la respuesta al efecto deseado. La respuesta aceptada actual es una forma alternativa de lograr el efecto deseado, pero realmente no responde a la pregunta. Es muy probable que las personas que encuentran esta pregunta busquen la respuesta a lo que se pregunta exactamente, en la mayoría de los casos no se aplica una forma alternativa.
Pedro Moreira
En ≤IE8, esto se ignorará por completo y no obligará a obtener tablas color:red. Esto podría ser bueno para algunos, pero para mí esperaba que se leyera como table {color:red;}y simplemente ignorara el :not().
DutGRIFF
7
@FranciscoCorralesMorales :not(.classOne):not(.classTwo)cf stackoverflow.com/a/5684168/248058
Knu
12

¿No establecería una regla CSS para todas las tablas y luego una regla posterior para las tablas donde class = "dojoxGrid" funciona? ¿O me estoy perdiendo algo?

cori
fuente
3
Sí, eso funcionaría absolutamente, pero establecería todas esas propiedades en un valor. Si desea dejarlos "desarmados", entonces no. Es de suponer que Nick está tratando de no golpear los valores de dojoxGrid, ya que están configurados en otro lugar.
kibibu
1
Creo que lo haría. Sin embargo, estoy configurando un montón de propiedades para todas las tablas, podría volver a sobrescribirlas con los valores predeterminados necesarios para dojoxGrid. Sin embargo, no estoy seguro de cuáles son estos valores predeterminados, ya que los genera la biblioteca dojo. Por eso buscaba otra forma de lograrlo.
Nick
4

La apuesta más segura es crear una clase en esas mesas y usarla. Actualmente, es poco probable que algo como esto funcione en todos los navegadores principales.

Joel
fuente