2014-06-17 12 views
64

Sto cercando di utilizzare la proprietà :not() di escludere un paio di classi da una regola, ad esempio:classi multiple all'interno: non()

*:not(.class1, class2) { display: none; } 

Tuttavia, sembra che la proprietà not() non supporta classi separate da virgola, come mostrato in this fiddle.

HTML:

<div class='one'> 
    foo 
</div> 
<div class='two'> 
    foo 
</div> 
<div class='three'> 
    foo 
</div> 
<div class='four'> 
    foo 
</div> 

CSS:

div { 
    background-color: #CBA; 
} 

div:not(.one) { 
    background-color: #ABC; 
} 

div:not(.one, .three) { 
    color: #F00; 
} 

Il primo e secondo regole vengono applicate, ma il terzo non lo fa.

non posso fare *:not(.class1), *:not(.class2) perché ogni elemento che deve class2 sarà selezionato da *:not(.class1) e viceversa.

Non voglio fare

* { display: none;} 
.class1, .class2 { display: inline; } 

perché non tutti i .class1 e .class2 elementi hanno la stessa proprietà di visualizzazione originale, e voglio loro di conservarlo.

Come posso escludere più classi da una regola, con la proprietà not() o altro?

+2

come avete notato, il coma non è ancora correttamente attuata, in modo da fare in questo modo: '*: non (.class1): non (.class2) 'e così via –

risposta

154

È possibile utilizzare:

div:not(.one):not(.three) { 
    color: #F00; 
} 

Fiddle

+0

... Ho avuto la sensazione che stavo trascurando qualcosa di abbastanza semplice. Ho scoperto che avevo ragione! Grazie (tornerò ad accettare presto, c'è un limite di tempo prima che io possa) – asfallows

+2

L'ho provato per il mio progetto ma rende la regola troppo specifica e sovrascrive la maggior parte delle altre mie regole. –

+5

che ne dici di 'not (.one, .three)'? sembra funzionare per me – Sean