2013-07-17 8 views
11

Diciamo che avete il seguente codice HTML:Come posso indirizzare i campi di inserimento del testo con i CSS?

<input /> 
<br /> 
<input type=text /> 

Naturalmente, nel mio HTML io avrò altro tipo di campi di input, come pure (caselle di controllo, ecc). Ora voglio modellare solo gli input di testo.

Quello che trovo durante la ricerca, è quello di fare quanto segue in CSS:

input[type=text] { background: red; } 

Per il secondo ingresso, in cui l'attributo è esplicitamente presente, questo funziona. Per il primo tuttavia, funziona in IE8, ma non in IE10. Inoltre non in Chrome.

Quindi, come posso indirizzare tutti i campi di immissione del testo e solo il campo di inserimento del testo, senza dover inserire type=text ovunque?

È possibile vedere questo in un jsFiddle. Per IE8, controlla these instructions su come raggiungere jsFiddle al lavoro, ma sembra che questo:

enter image description here

risposta

16

Se si vuole essere in grado di omettere lo type="text" e avere ancora la corrispondenza del selettore , si dovrà utilizzare il not psuedoselector disponibili in CSS3:

input[type="text"], input:not([type]) { 
    ... 
} 

http://jsfiddle.net/dByqP/5/

Questo non funziona nelle versioni inferiori di IE, come CSS3 non è ben supportato in questi browser.

La soluzione migliore sarebbe quella di passare e aggiungere type="text" agli input di testo e utilizzare solo il selettore originale.

+1

Oh, ma: non così non funzionerebbe su Netscape o IE 6 e precedenti ... :-) –

+0

@ rodrigo-silveira http://lifehacker.com/5925287/dear-web-user-please-upgrade-your -browser: P – jbabey

+1

Ottimo articolo, @jbabey Lo inoltrerò a mia nonna che usa ancora IE ... –

1

Un doloroso, ma certo modo potrebbe fare è quello di impostare lo stile su semplicemente

input { 
    /* ... */ 
} 

quali dovrebbero essere destinati l'immissione di testo in tutti i browser, allora si potrebbe fare quello che stavano facendo, e indirizzare ogni singolo tipo di input che non è un input di testo:

input[type=range] {} 
input [type=phone] {} 
// etc. 

In questo modo, anche se l'operatore: not disponibile nei CSS3 non è supportato da un browser, è ancora possibile farlo funzionare ...

+0

Questo funzionerebbe ma è una sorta di approccio opposto. Nel mio caso, penso che richiederebbe molto lavoro, perché per ogni tipo di input, dovrei fare delle eccezioni. Mentre tutto quello che voglio fare è stile gli elementi di input del testo. – Peter

0

Style l'ingresso utilizzando una classe e CSS:

.redBG 
{ 
    background: red; 
} 

Allora il vostro HTML è:

<input class="redBG" /> 

Attached jsFiddle.

+1

Bene, se è possibile aggiungere una classe, è possibile aggiungere un tipo ... – Brewal

+0

@Brewal il mio pensiero è che potrebbe esserci più di uno stile necessario ... Potrei averlo trovato sbagliato! –

+0

Lo svantaggio di questo approccio è che, se si desidera dare una certa occhiata a tutto il sito, è necessario aggiungere la classe a tutti gli elementi di input. Quindi, per il mio scenario, non è molto adatto. – Peter

1

Il mio suggerimento sarebbe quello di avere lo stile di default per l'ingresso sia

input { 
    background-color: red; 
} 

poi sovrascrivere lo stile per qualcos'altro, se necessario, ad esempio un pulsante blu

input[type='button'] { 
    background-color: blue; 
} 

naturalmente si avrebbe bisogno per andare e specificare stili specifici per specifici tipi di input, ma questo non significa che non lo avresti fatto comunque, se per esempio volevi un pulsante univoco.

+0

Come dici, sarebbe molto lavoro. Considerando che voglio modellare solo gli elementi di testo di input, qui dovrei fare eccezioni per tutti gli altri tipi di elementi. – Peter

+0

Sì, la risposta di jbabey è molto meglio della mia. Ho davvero bisogno di tenermi aggiornato sul mio CSS XD – pandavenger

Problemi correlati