Esiste un selettore CSS diverso da quello?


116

C'è qualcosa come! = (Non uguale) nei CSS? ad esempio, ho il seguente codice:

input {
 ... 
 ...
}

ma per alcuni input ho bisogno di annullarlo. Mi piacerebbe farlo aggiungendo la classe "reset" al tag di input, ad es

<input class="reset" ... />

e quindi salta semplicemente questo tag da CSS.

Come posso farlo?

L'unico modo che posso vedere sarebbe aggiungere una classe al tag di input e riscrivere il CSS come segue:

input.mod {
 ...
 ...
}

Hai risposto alla tua domanda, credo. Metti lo stile in input.mod e aggiungi la classe "mod" nel tag di input desiderato.
Nazmul

Risposte:


157

In CSS3, puoi utilizzare il :not()filtro, ma non tutti i browser supportano ancora completamente CSS3, quindi assicurati di sapere cosa stai facendo che ora è supportato da tutti i principali browser (ed è stato per un po 'di tempo; questa è una vecchia risposta ...).

Esempio:

<input type="text" value="will be matched" />
<input type="text" value="will not be matched" class="avoidme" />
<input type="text" value="will be matched" />

e il CSS

input:not(.avoidme) { background-color: green; }

Nota: questa soluzione alternativa non dovrebbe più essere necessaria; Lo lascio qui per il contesto.

Se non vuoi usare CSS3, puoi impostare lo stile su tutti gli elementi e poi reimpostarlo con una classe.

input { background-color: green; }
input.avoidme { background-color: white; }

OMG ... sapevo che esiste :) Sì, lo è! Grazie.
Alex Ivasyuv

2
Il supporto manca principalmente da IE8 (e versioni precedenti). Se qualcuno è interessato a un polyfill: selectivizr.com
franzlorenzon

1
@Guru: Puoi concatenare più :not()selettori: input:not(.avoidme):not(.avoidmetoo)eviterà elementi con entrambe le classi, input:not(.avoidme.andme)eviterà elementi con entrambe le classi.
Tomas Aschan

1
@TomasLycken, in realtà, l'utilizzo di più selettori è un ingannevole in CSS, ad esempio :not(.this.that) { }lavoro può, ma se fai qualcosa, come :not(.this, .that) { }si cade giù, si deve a margherita loro come ad esempio: :not(.this):not(.that). Capisco che probabilmente lo sai, sto cercando di aiutare i futuri lettori :)
Can O 'Spam

1
Lasciando qui un commento per i futuri lettori: Il commento di @SamSwift 웃 è ancora accurato, ma il supporto per le liste arriverà (forse) in futuro . Per ora, tuttavia, all'interno sono supportati solo selettori singoli :not().
Tomas Aschan

24

Puoi anche farlo "ripristinando" le modifiche sulla classe di ripristino solo in CSS.

INPUT { 
    padding: 0px;
}
INPUT.reset {
    padding: 4px;
}


6

Puoi anche affrontarlo scegliendo come target un attributo come questo:

input:not([type=checkbox]){ width:100%; }

In questo caso tutti gli input che non sono di tipo "checkbox" avranno una larghezza del 100%.


4

Interessante appena provato questo per selezionare l'elemento DOM utilizzando JQuery e funziona! :)

$("input[class!='bad_class']");

Questa pagina ha 168 div che non hanno la classe "commento-copia"

$("div[class!='comment-copy']").length => 168
$("div[class!='.comment-copy']").length => 168

11
[attr!="value"]è un selettore solo jQuery api.jquery.com/attribute-not-equal-selector
xec

Cosa c'entra questo con i CSS?
devlin carnate

@devlincarnate I selettori "CSS" sono stati inseriti in JS ( circa 2013 ), quindi la gente lo cerca.
Nick T

0

invece di class = "reset" potresti invertire la logica con class = "valid" Puoi aggiungerlo di default e rimuovere la classe per ripristinare lo stile.

Quindi dal tuo esempio e da quello di Tomas

input.valid {
 ... 
 ...
}

e

<input type="text" value="will be matched" class="valid"/>
<input type="text" value="will not be matched" />
<input type="text" value="will be matched" class="valid"/>

2
Penso che l'idea di poter "resettare" applicando a una classe fosse che il numero di elementi che non avrebbero dovuto avere lo stile predefinito superava di molto quelli che avrebbero dovuto, quindi l'OP non voleva applicare nessuna classe a la maggior parte degli elementi.
Tomas Aschan
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.