Como criar uma regra de css para todos os elementos, exceto uma classe?

95

Eu criei uma folha de estilo CSS para meu projeto. Existe alguma maneira de criar uma regra de css que se aplica a todos os elementos da tabela EXCETO os elementos da tabela pertencentes à classe "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;
}
usuario
fonte
Você precisa disso para funcionar em vários navegadores? Os navegadores têm suporte diferente para os seletores CSS mais flexíveis. Pode ser algo que você possa fazer no script se for absolutamente necessário e precisar ser cross-browser.
kibibu,
sim, preciso que funcione nos principais navegadores. Existe alguma outra maneira de conseguir isso em vez de scripts? felicidades
Nick,
A abordagem de Cori funcionará em navegadores desde o ie4, talvez antes.
kibibu,

Respostas:

183

A pseudo-classe de negação parece ser o que você está procurando.

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

No entanto, não é compatível com ≤ IE8 .

Knu
fonte
2
esse é um bom seletor de css3 para se estar ciente - provavelmente utilizável no IE9.
Cori,
4
embora meu comentário não seja diretamente aplicável à questão, é importante notar que :notPODE ser usado como um seletor jquery. ou seja $("[data-name='bob']:not(a)"), o que é bom.
gingerbreadboy
3
Essa deve ser a resposta aceita, pois é a resposta para o efeito desejado. A resposta aceita atualmente é uma forma alternativa de alcançar o efeito desejado, mas não responde realmente à pergunta. As pessoas que encontram esta pergunta, muito provavelmente estão procurando a resposta para o que exatamente é perguntado; na maioria dos casos, uma forma alternativa não se aplica.
Pedro Moreira
Em ≤IE8, isso será completamente ignorado, não forçando nenhuma tabela a ser obtida color:red. Isso pode ser bom para alguns, mas para mim eu esperava que fosse lido como table {color:red;}e simplesmente ignorasse o :not().
DutGRIFF
7
@FranciscoCorralesMorales :not(.classOne):not(.classTwo)cf stackoverflow.com/a/5684168/248058
Knu
12

Definir uma regra de css para todas as tabelas, e depois uma subsequente para tabelas onde class = "dojoxGrid" funcionaria? Ou eu estou esquecendo de alguma coisa?

Cori
fonte
3
Sim, isso funcionaria perfeitamente, mas você configuraria todas essas propriedades com um valor. Se você quiser deixá-los "não definidos", não. Presumivelmente, Nick está tentando não destruir os valores de dojoxGrid, pois eles estão configurados em outro lugar.
kibibu,
1
Eu acho que sim. No entanto, estou definindo várias propriedades para todas as tabelas, eu poderia sobrescrevê-las novamente com os valores padrão necessários para o dojoxGrid. No entanto, não tenho certeza de quais são esses valores padrão, pois são gerados pela biblioteca do dojo. Portanto, eu estava procurando outra maneira de alcançá-lo.
Nick
4

A aposta mais segura é criar uma classe nessas mesas e usá-la. Atualmente, é improvável que algo assim funcione em todos os principais navegadores.

Joel
fonte