Wie erstelle ich eine CSS-Regel für alle Elemente außer einer Klasse?

95

Ich habe ein CSS-Stylesheet für mein Projekt erstellt. Gibt es eine Möglichkeit, eine CSS-Regel zu erstellen, die für alle Tabellenelemente gilt, AUSSER Tabellenelemente, die zur Klasse "dojoxGrid" gehören? Etwas wie:

.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;
}
Nick
quelle
Benötigen Sie dies, um browserübergreifend zu arbeiten? Browser unterstützen die flexibleren CSS-Selektoren unterschiedlich. Es könnte etwas sein, das Sie im Skript tun könnten, wenn es unbedingt erforderlich ist und browserübergreifend sein muss.
Kibibu
Ja, ich brauche es, um mit gängigen Browsern zu arbeiten. Gibt es eine andere Möglichkeit, dies zu erreichen, als durch Skripten? Prost
Nick
Coris Ansatz funktioniert mit Browsern bis zu ie4, vielleicht früher.
Kibibu

Antworten:

181

Die Negations-Pseudoklasse scheint das zu sein, wonach Sie suchen.

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

Es wird jedoch nicht von ≤ IE8 unterstützt .

Knu
quelle
2
Das ist eine nette CSS3-Auswahl, die Sie beachten sollten - hoffentlich in IE9 verwendbar.
Cori
4
Obwohl mein Kommentar nicht direkt auf die Frage anwendbar ist, ist es erwähnenswert, dass :notCAN als JQuery-Selektor verwendet werden kann. dh $("[data-name='bob']:not(a)")das ist schön.
Lebkuchenjunge
3
Dies sollte die akzeptierte Antwort sein, da dies die Antwort auf den gewünschten Effekt ist. Die aktuell akzeptierte Antwort ist ein alternativer Weg, um den gewünschten Effekt zu erzielen, beantwortet die Frage jedoch nicht wirklich. Menschen, die diese Frage finden, suchen sehr wahrscheinlich nach der Antwort auf das, was genau gestellt wird. In den meisten Fällen trifft ein alternativer Weg nicht zu.
Pedro Moreira
In ≤IE8 wird dies vollständig ignoriert, sodass keine Tabellen abgerufen werden müssen color:red. Das mag für einige gut sein, aber für mich hatte ich gehofft, es würde es so lesen table {color:red;}und das einfach ignorieren :not().
DutGRIFF
7
@FranciscoCorralesMorales :not(.classOne):not(.classTwo)cf stackoverflow.com/a/5684168/248058
Knu
12

Würde nicht eine CSS-Regel für alle Tabellen und dann eine nachfolgende für Tabellen mit class = "dojoxGrid" festgelegt? Oder fehlt mir etwas?

cori
quelle
3
Ja, das würde absolut funktionieren, aber Sie würden all diese Eigenschaften auf einen Wert setzen. Wenn Sie sie "nicht gesetzt" lassen wollten, dann nein. Vermutlich versucht Nick, die Werte für dojoxGrid nicht zu beeinträchtigen, da sie an anderer Stelle festgelegt sind.
Kibibu
1
Ich denke es würde. Da ich jedoch eine Reihe von Eigenschaften für alle Tabellen festlege, könnte ich sie erneut mit den für dojoxGrid erforderlichen Standardwerten überschreiben. Ich bin mir jedoch nicht sicher, wie diese Standardwerte lauten, da sie von der Dojo-Bibliothek generiert werden. Deshalb suchte ich nach einem anderen Weg, um dies zu erreichen.
Nick
4

Am sichersten ist es, eine Klasse für diese Tabellen zu erstellen und diese zu verwenden. Derzeit ist es unwahrscheinlich, dass so etwas in allen gängigen Browsern funktioniert.

Joel
quelle