Jak stworzyć regułę CSS dla wszystkich elementów oprócz jednej klasy?

97

Stworzyłem arkusz stylów CSS dla mojego projektu. Czy istnieje sposób, w jaki mogę utworzyć regułę css, która będzie miała zastosowanie do wszystkich elementów tabeli Z WYJĄTKIEM elementów tabeli należących do klasy „dojoxGrid”? Coś jak:

.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;
}
Nacięcie
źródło
Czy potrzebujesz tego do pracy w różnych przeglądarkach? Przeglądarki mają różne wsparcie dla bardziej elastycznych selektorów CSS. Może to być coś, co możesz zrobić w skrypcie, jeśli jest to absolutnie wymagane i musi być obsługiwane przez różne przeglądarki.
kibibu
tak, potrzebuję go do działania w głównych przeglądarkach. Czy mogę to osiągnąć w inny sposób niż poprzez skrypty? okrzyki
Nick
Podejście Cori będzie działać w przeglądarkach aż do ie4, może wcześniej.
kibibu

Odpowiedzi:

186

Negacji Pseudo-klasa wydaje się być to, czego szukasz.

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

Nie jest jednak obsługiwany przez ≤ IE8 .

Knu
źródło
2
to fajny selektor css3, o którym należy pamiętać - miejmy nadzieję, że będzie użyteczny w IE9.
cori
4
chociaż mój komentarz nie odnosi się bezpośrednio do pytania, warto zauważyć, że :notMOŻE być używany jako selektor jquery. tj. $("[data-name='bob']:not(a)"), co jest miłe.
gingerbreadboy
3
To powinna być akceptowana odpowiedź, ponieważ jest to odpowiedź na pożądany efekt. Obecnie przyjęta odpowiedź jest alternatywnym sposobem osiągnięcia pożądanego efektu, ale tak naprawdę nie odpowiada na pytanie. Ludzie, którzy znajdą to pytanie, najprawdopodobniej szukają odpowiedzi na to, co jest dokładnie zadawane, w większości przypadków nie ma zastosowania alternatywna droga.
Pedro Moreira
W ≤IE8 będzie to całkowicie ignorowane, nie zmuszając żadnych tabel do zdobycia color:red. Może to być dobre dla niektórych, ale dla mnie miałam nadzieję, że to przeczyta table {color:red;}i po prostu zignoruje :not().
DutGRIFF
7
@FranciscoCorralesMorales :not(.classOne):not(.classTwo)cf stackoverflow.com/a/5684168/248058
Knu
12

Czy ustawienie reguły css nie dla wszystkich tabel, a następnie kolejnej dla tabel, w których działa class = "dojoxGrid"? A może coś mi brakuje?

cori
źródło
3
Tak, to by absolutnie działało, ale ustawiałbyś wszystkie te właściwości na wartość. Jeśli chcesz zostawić je „nieuzbrojone”, to nie. Prawdopodobnie Nick stara się nie przebić wartości dla dojoxGrid, ponieważ są one ustawione gdzie indziej.
kibibu
1
Myślę, że tak. Jednak ustawiam kilka właściwości dla wszystkich tabel, mogę ponownie nadpisać je domyślnymi wartościami potrzebnymi dla dojoxGrid. Jednak nie jestem pewien, jakie są te wartości domyślne, ponieważ są generowane przez bibliotekę dojo. Dlatego szukałem innego sposobu, aby to osiągnąć.
Nick
4

Najbezpieczniejszym zakładem jest utworzenie klasy na tych stołach i użycie tego. Obecnie jest mało prawdopodobne, aby coś takiego działało we wszystkich głównych przeglądarkach.

Joel
źródło