2012-03-09 14 views
127

Attualmente sto usando readonly = "readonly" per disabilitare i campi. Ora sto cercando di definire l'attributo usando i CSS. Ho provato a utilizzareCome attribuire un attributo readonly con i CSS?

input[readonly] { 
/*styling info here*/ 
} 

ma non funziona per qualche motivo. Ho anche provato

input[readonly='readonly'] { 
/*styling info here*/ 
} 

che non funziona neanche.

Come è possibile applicare l'attributo readonly con i CSS?

+12

'input [readonly]' dovrebbe funzionare. Assicurati che non venga sovrascritto da altri selettori più specifici altrove nel tuo foglio di stile. – BoltClock

+1

se si desidera disabilitare, quindi utilizzare l'attributo disabilitato e non in sola lettura –

+0

Ho notato che manchi un apostrofo nel secondo selettore. Dovrebbe essere inserito [readonly = 'readonly'] e funzionerà come input [readonly]. –

risposta

180
input[readonly] 
{ 
    background-color:blue; 
} 

https://curtistimson.co.uk/post/css/style-readonly-attribute-css/

+23

Dovresti usare 'input [readonly]' invece che 'readonly' è un attributo booleano che non è progettato per avere un valore specifico. – BoltClock

+1

@BoltClock Sì. Si prega di vedere la risoluzione nella risposta qui sotto. –

+0

Come posso renderlo nuovamente scrivibile? Rimuovendo solo lo stile della classe? –

68

noti che textarea[readonly="readonly"] opere se si imposta readonly="readonly" in HTML, ma non funziona se si imposta la readOnly -attribute a true o "readonly" tramite JavaScript.

Per il selettore CSS per lavorare se si imposta readOnly con JavaScript è necessario utilizzare il selettore textarea[readonly].

stesso comportamento in Firefox e Chrome 14 20.

Per essere sul sicuro, io uso entrambi i selettori.

textarea[readonly="readonly"], textarea[readonly] { 
... 
} 
+15

Puoi anche usare semplicemente 'textarea [readonly]' invece - ogni 'textarea [readonly =" readonly " ] 'è garantito che corrisponda a questo – BoltClock

-10

Forse dovresti provare DISABILITA.

input[type="text"]:disabled, 
select:disabled, 
textarea:disabled { color: #000; background-color: #ebebe4; } 
+5

Un elemento può essere in sola lettura ma abilitato.Questo escluderebbe tale elemento. – BoltClock

+11

Gli elementi disabilitati non sempre inviano i dati al server, gli elementi di sola lettura lo fanno. –

1

utilizzare la seguente per funzionare in tutti i browser:

var readOnlyAttr = $('.textBoxClass').attr('readonly'); 
    if (typeof readOnlyAttr !== 'undefined' && readOnlyAttr !== false) { 
     $('.textBoxClass').addClass('locked'); 
    } 
+5

Tranne dove JavaScript è disabilitato ... –

+5

il 98% non lo è. –

+2

Quindi, spero che il tuo pubblico di destinazione non sia in quel 2%. – Bacco

21

Per essere sicuri si consiglia di utilizzare sia ...

input[readonly], input[readonly="readonly"] { 
    /*styling info here*/ 
} 

L'attributo di sola lettura è un "attributo booleano ", che può essere vuoto o" readonly "(gli unici valori validi). http://www.whatwg.org/specs/web-apps/current-work/#boolean-attribute

Se si utilizza qualcosa come la funzione di jQuery .prop('readonly', true), si finirà per dover [readonly], mentre se si utilizza .attr("readonly", "readonly") allora avrete bisogno [readonly="readonly"].


Correzione: Hai solo bisogno di usare input[readonly]. Compreso lo input[readonly="readonly"] è ridondante. Vedere https://stackoverflow.com/a/19645203/1766230

2

Se si seleziona l'ingresso per l'id e quindi aggiungere il tag input[readonly="readonly"] nel css, qualcosa come:

#inputID input[readonly="readonly"] { 
    background-color: #000000; 
} 

che non funzionano. Devi selezionare una classe genitore o id an quindi l'input.Qualcosa di simile:

.parentClass, #parentID input[readonly="readonly"] { 
    background-color: #000000; 
} 

I miei 2 centesimi in attesa di nuovi biglietti al lavoro: D

+0

"Se si seleziona l'input dall'ID" - che l'OP non è, quindi come è rilevante? Anche se fosse il caso, ti sbagli, devi solo rimuovere il combinatore discendente. – Quentin

+0

AH ok vuoi dire che devo scrivere qualcosa come input [readonly = "readonly"] # inputID?/me pazzo .. hai ragione – softwareplay

15

Carichi di risposte qui, ma non ho visto quello che uso:

input[type="text"]:read-only { color: blue; } 

Nota del dash nello pseudo selettore. Se l'input è readonly="false" lo prenderà anche perché questo selettore rileva la presenza di readonly indipendentemente dal valore. Tecnicamente false non è valido secondo le specifiche, ma Internet non è un mondo perfetto. Se avete bisogno di coprire quel caso, si può fare questo:

input[type="text"]:read-only:not([read-only="false"]) { color: blue; } 

textarea funziona allo stesso modo:

textarea:read-only:not([read-only="false"]) { color: blue; } 

Tenete a mente che HTML ora supporta non solo type="text", ma una sfilza di altri testuale tipi come , tel, email, date, time, url, ecc. Ognuno dovrebbe essere aggiunto al selettore.

+0

Bello uno @IAmNaN –

+1

Non funziona su IE. –

+2

Neanche io. LOL Sì, hai ragione! Per adesso. ': sola lettura' e altri selettori di psuedo sono stati aggiunti allo standard W3C e possono essere utilizzati con le versioni di anteprima di IE 10 10547 e successive. – IAmNaN

1
input[readonly], input:read-only { 
    /* styling info here */ 
} 

Shoud coprono tutti i casi per un campo di input di sola lettura ...

+0

Quando viene usato 'input: read-only'? Non l'ho mai visto prima. – Luke

+0

input: read-only è la "pseudo-classe della mutevolezza che mira a semplificare lo stile dello styling basandosi su attributi HTML disabilitati, readonly e contentedabili" Come menzionato qui, https://css-tricks.com/almanac/selectors/r/read -write-read /, varie implementazioni sono piuttosto fastidiose. – peater

2

Ci sono alcuni modi per farlo.

Il primo è il più utilizzato.

input[readonly] { 
background-color: #dddddd; 
} 

Mentre quella sopra selezionerà tutti gli ingressi con readonly allegata, questo sarà selezionare solo quelli desiderati. Assicurati di sostituire demo con qualsiasi tipo tu voglia.

input[type="demo"]:read-only { 
background-color: #dddddd; 
} 

Questo non è usato un bel po ':

input:read-only { 
background-color: #dddddd; 
} 

Il selettore :read-only è supportato in Chrome, Opera e Safari. Firefox utilizza :-moz-read-only. IE non supporta il selettore :read-only.

È anche possibile utilizzare input[readonly="readonly"], ma questo è praticamente lo stesso di input[readonly], dalla mia esperienza.

Problemi correlati