Selettore CSS per <input type = "?"


105

C'è un modo con i CSS per indirizzare tutti gli input in base al loro tipo? Ho una classe disabilitata che uso su vari elementi del modulo disabilitati e sto impostando il colore di sfondo per le caselle di testo, ma non voglio che le mie caselle di controllo ottengano quel colore.

So di poterlo fare con classi separate, ma preferisco usare CSS se possibile. Sono sicuro di poterlo impostare in javascript ma di nuovo alla ricerca di CSS.

Sto prendendo di mira IE7 +. Quindi non penso di poter usare CSS3.

modificare

Con CSS3 sarei in grado di fare qualcosa del genere?

INPUT[type='text']:disabled sarebbe ancora meglio sbarazzarsi del tutto della mia classe ...

modificare

Ok grazie per l'aiuto! Quindi ecco un selettore che modifica tutte le caselle di testo e le aree che sono state disabilitate senza richiedere l'impostazione di classi, quando ho iniziato questa domanda non avrei mai pensato che fosse possibile ...

INPUT[disabled][type='text'], TEXTAREA[disabled]
{   
    background-color: Silver;
}

Funziona in IE7


2
Ho scritto un articolo con alcune informazioni dettagliate sui selettori di attributi CSS.
Sarfraz

Risposte:


155

Sì. IE7 + supporta i selettori di attributi:

input[type=radio]
input[type^=ra]
input[type*=d]
input[type$=io]

Input di elemento con tipo di attributo che contiene un valore uguale a, inizia con, contiene o finisce con un determinato valore.

Altri selettori sicuri (IE7 +) sono:

  • Genitore> figlio che ha: p > span { font-weight: bold; }
  • Preceduto da ~ elemento che è: span ~ span { color: blue; }

Che <p><span/><span/></p>ti darebbe effettivamente:

<p>
    <span style="font-weight: bold;">
    <span style="font-weight: bold; color: blue;">
</p>

Ulteriori letture: compatibilità CSS del browser su quirksmode.com

Sono sorpreso che tutti gli altri pensino che non si possa fare. I selettori di attributi CSS sono qui già da un po 'di tempo. Immagino sia ora di ripulire i nostri file .css.


Ok, avevo provato questo ma non ha funzionato ora funziona quindi devo avere la mia sintassi incasinata.
JoshBerke

Mi hai migliorato la giornata! Ora, se vuoi fare la mia settimana dimmi che può essere fatto in IE6 senza usare Expressions hehe :-) j / k there
JoshBerke

13
Purtroppo non è possibile. Ho smesso di sostenere IE6 per opinioni religiose e suggerisco a tutti di farlo anche noi. Oggi utilizzo il commento condizionale di IE per dire agli utenti che il loro computer e la loro privacy sono a rischio per l'utilizzo di IE6 e che dovrebbero aggiornare immediatamente: P
Filip Dupanović

1
Immagino di essere così abituato a supportare IE6 che pensavo che non avrebbe funzionato nemmeno in IE7
TJ L

4
Vorrei poter smettere di supportare IE6 ma non posso e non posso fare come mi hai suggerito ... Ma spero davvero di poterlo fare ;-)
JoshBerke

3

Purtroppo gli altri poster hanno ragione sul fatto che tu ... in realtà come corretto da kRON, stai bene con il tuo IE7 e un documento rigoroso, ma la maggior parte di noi con i requisiti di IE6 è ridotta a JS o riferimenti di classe per questo, ma lo è una proprietà CSS2, solo una senza un supporto sufficiente dai browser IE ^ h ^ h.

Per completezza, il selettore del tipo è - simile a xpath - del modulo [attribute=value]ma esistono molte varianti interessanti. Esso sarà essere molto potente quando è disponibile, buona cosa da tenere in testa per IE8.


Hai un riferimento per il supporto del browser più aggiornato? Basato sulla beta di IE7 mi piacerebbe vedere IE8
JoshBerke

IE8 è ancora in versione beta, ma quirksmode dice "sì": quirksmode.org/css/contents.html
annakata

Sto ancora supportando IE6 ma non questo piccolo aggiustamento visivo aggiunto.
JoshBerke

abbastanza giusto, è stato un mio errore rispondere in base al titolo, tendo a rispondere a casi generali - dovrei davvero leggere di più le domande :)
annakata

1

Puoi farlo con jQuery. Usando i loro selettori, puoi selezionare per attributi, come il tipo. Ciò, tuttavia, richiede che i tuoi utenti abbiano Javascript attivato e un file aggiuntivo da scaricare, ma se funziona ...


0

Spiacenti, la risposta breve è no. I CSS (2.1) marcheranno solo gli elementi di un DOM, non i loro attributi. Dovresti applicare una classe specifica a ogni input.

Peccato lo so, perché sarebbe incredibilmente utile.

So che hai detto che preferiresti CSS a JavaScript, ma dovresti comunque considerare l'utilizzo di jQuery. Fornisce un modo molto pulito ed elegante per aggiungere stili agli elementi DOM in base agli attributi.


jquery è il modo per farlo, o solo JavaScript in generale
TravisO

4
Afaict, questa risposta non è corretta (la parte CSS 2.1): w3.org/TR/CSS21/selector.html#attribute-selectors . In caso contrario, chiarisci la tua risposta.
cic

1
Scusa, hai ragione. Mi aspetto solo il minimo da IE7 perché così spesso agli sviluppatori è ancora richiesto di supportare IE6 allo stesso tempo. Avrei dovuto leggere la domanda con più attenzione e fare i compiti.
Phil.Wheeler
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.