Come creare una regola CSS per tutti gli elementi tranne una classe?


95

Ho creato un foglio di stile CSS per il mio progetto. Esiste un modo per creare una regola CSS che si applica a tutti gli elementi della tabella TRANNE gli elementi della tabella appartenenti alla classe "dojoxGrid"? Qualcosa di simile a:

.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;
}

Ti serve per funzionare su più browser? I browser hanno un supporto diverso per i selettori CSS più flessibili. Potrebbe essere qualcosa che potresti fare nello script se è assolutamente necessario e deve essere cross-browser.
kibibu

sì, ne ho bisogno per funzionare sui principali browser. C'è un altro modo per ottenerlo piuttosto che attraverso lo scripting? acclamazioni
Nick

L'approccio di Cori funzionerà sui browser fino a ie4, forse prima.
kibibu

Risposte:


183

La pseudo-classe di negazione sembra essere ciò che stai cercando.

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

Tuttavia, non è supportato da ≤ IE8 .


2
è un bel selettore css3 di cui essere a conoscenza, si spera utilizzabile in IE9.
cori

4
sebbene il mio commento non sia direttamente applicabile alla domanda, vale la pena notare che :notPU essere utilizzato come selettore jquery. cioè $("[data-name='bob']:not(a)"), che è carino.
gingerbreadboy

3
Questa dovrebbe essere la risposta accettata, perché è la risposta all'effetto desiderato. L'attuale risposta accettata è un modo alternativo per ottenere l'effetto desiderato, ma non risponde realmente alla domanda. Le persone che trovano questa domanda, molto probabilmente stanno cercando la risposta a ciò che viene chiesto esattamente, nella maggior parte dei casi un modo alternativo non si applica.
Pedro Moreira

In ≤IE8 questo sarà completamente ignorato, non forzando la ricezione di tabelle color:red. Questo potrebbe essere buono per alcuni, ma per me speravo che lo leggesse table {color:red;}e ignorasse il file :not().
DutGRIFF

7
@FranciscoCorralesMorales :not(.classOne):not(.classTwo)cf stackoverflow.com/a/5684168/248058
Knu

12

L'impostazione di una regola CSS per tutte le tabelle e poi una successiva per le tabelle in cui class = "dojoxGrid" non funzionerebbe? Oppure mi sfugge qualcosa?


3
Sì, funzionerebbe assolutamente, ma imposteresti tutte quelle proprietà su un valore. Se vuoi lasciarli "non impostati", allora no. Presumibilmente Nick sta cercando di non bloccare i valori per dojoxGrid poiché sono impostati altrove.
kibibu

1
Penso che sarebbe. Tuttavia sto impostando un mucchio di proprietà per tutte le tabelle, potrei ancora sovrascriverle con i valori predefiniti necessari per dojoxGrid. Tuttavia non sono sicuro di quali siano questi valori predefiniti in quanto vengono generati dalla libreria dojo. Quindi stavo cercando un altro modo per ottenerlo.
Nick

4

La scommessa più sicura è creare una classe su quei tavoli e usarla. Attualmente è improbabile che qualcosa di simile funzioni in tutti i principali browser.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.