Come definire l'attributo di sola lettura con CSS?


150

Attualmente sto usando readonly = "readonly" per disabilitare i campi. Ora sto provando a modellare l'attributo usando CSS. Ho provato ad usare

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

ma non funziona per qualche motivo. Ci ho anche provato

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

neanche quello funziona.

Come posso modellare l'attributo readonly con 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 vuoi disabilitare, usa l'attributo disabilitato e non di sola lettura
Sven Bieder

3
@SvenBieder In sola lettura e disabilitati hanno un comportamento completamente diverso. I campi di sola lettura inviati al server al momento dell'invio del modulo mentre i campi disabilitati non lo sono.
Naren,

3
input[readonly='readonly']funzionerà solo se usi HTML come <input readonly="readonly">, non per es <input readonly>. input[readonly]dovrebbe corrispondere ad entrambi.
Mathias Bynens,

1
!importantdovrebbe funzionare per sovrascrivere, a meno che tu non abbia anche !importantsulla classe setting?
Matt K

Risposte:


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

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


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

1
@BoltClock Sì. Si prega di consultare la risoluzione nella risposta di seguito.
Pal R

Come posso renderlo nuovamente scrivibile? Rimuovere lo stile di classe?
Renaro Santos,

@RenaroSantos Questo è un cambiamento HTML. Rimuovi readonly="readonly"dal tuo inputelemento.
Curt

Con IE7 puoi ancora usare il selettore con jQuery
ladieu

69

Si noti che textarea[readonly="readonly"]funziona se si imposta readonly="readonly"in HTML ma NON funziona se si imposta readOnly-attribute su trueo "readonly"tramite JavaScript.

Perché il selettore CSS funzioni se si imposta readOnlycon JavaScript, è necessario utilizzare il selettore textarea[readonly].

Stesso comportamento in Firefox 14 e Chrome 20.

Per essere al sicuro, utilizzo entrambi i selettori.

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

18
Puoi anche solo usare textarea[readonly]invece - ogni textarea[readonly="readonly"]è garantito per abbinarlo.
BoltClock

23

Per sicurezza potresti voler usare entrambi ...

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

L'attributo readonly è 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 stai usando qualcosa come la .prop('readonly', true)funzione di jQuery , finirai per averne bisogno [readonly], mentre se lo stai usando .attr("readonly", "readonly")allora avrai bisogno [readonly="readonly"].


Correzione: devi solo usare input[readonly]. Incluso input[readonly="readonly"]è ridondante. Vedi https://stackoverflow.com/a/19645203/1766230


20

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

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

Nota il trattino nello pseudo-selettore. Se l'input è, readonly="false"lo prenderà anche perché questo selettore rileva la presenza di sola lettura indipendentemente dal valore. Tecnicamente falsenon è valido secondo le specifiche, ma Internet non è un mondo perfetto. Se hai bisogno di coprire quel caso, puoi farlo:

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 l'HTML ora supporta non solo type="text", ma una sfilza di altri tipi testuali tale number, tel, email, date, time, url, ecc Ogni avrebbe bisogno di essere aggiunta al selettore.


2
Nemmeno io. LOL Sì, hai ragione! Per adesso. :read-onlye altri selettori psuedo sono stati aggiunti allo standard W3C e possono essere utilizzati con build di anteprima IE 10 10547 e successive.
IAmNaN

6

Ci sono alcuni modi per farlo.

Il primo è il più utilizzato. Funziona su tutti i principali browser.

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

Mentre quello sopra selezionerà tutti gli ingressi con readonlyallegato, questo sotto selezionerà solo ciò che desideri. Assicurati di sostituire democon qualsiasi tipo di input desiderato.

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

Questa è un'alternativa alla prima, ma non è usata molto:

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

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

Puoi anche usare input[readonly="readonly"], ma questo è praticamente lo stesso input[readonly]della mia esperienza.


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

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


input: sola lettura è la "pseudo-classe di mutabilità che mira a rendere più semplice lo styling dei moduli basato su attributi HTML disabilitati, di sola lettura e contendibili " Come menzionato qui, css-tricks.com/almanac/selectors/r/read-write-read , varie implementazioni sono piuttosto traballanti.
peater

Questo è strano ma solo l'input [di sola lettura] ha funzionato per me in FF 58
Pavel_K

3

scrivere in maiuscolo la prima lettera di Only

input[readOnly] {
      background: red !important;
    }
<input type="text" name="country" value="China" readonly="readonly" />


2

Se si seleziona l'input dall'id e quindi si aggiunge il input[readonly="readonly"]tag nel CSS, qualcosa di simile:

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

Non funzionerà. Devi selezionare una classe genitore o un id quindi l'input. Qualcosa di simile a:

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

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


"Se si seleziona l'ingresso tramite l'id", che non è l'OP, come è rilevante? Anche se fosse il caso, ti sbagli, devi solo rimuovere il combinatore discendente.
Quentin,

AH ok intendi che devo digitare qualcosa come input [readonly = "readonly"] # inputID? / io scemo .. hai ragione
softwareplay

1

Utilizzare quanto segue per funzionare in tutti i browser:

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

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

Cosa include la classe 'bloccato' ??
AdiT

$ ('. textBoxClass'). addClass ('bloccato') includerà 'bloccato'
Pal R
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.