¿Cómo dar estilo al atributo de solo lectura con CSS?

150

Actualmente estoy usando readonly = "readonly" para deshabilitar los campos. Ahora estoy tratando de diseñar el atributo usando CSS. He intentado usar

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

pero no funciona por alguna razón. También he intentado

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

eso tampoco funciona.

¿Cómo puedo diseñar el atributo de solo lectura con CSS?

Dafne
fuente
12
input[readonly]Deberia trabajar. Asegúrese de que no esté siendo anulado por otros selectores más específicos en otra parte de su hoja de estilo.
BoltClock
1
si desea deshabilitar, use el atributo deshabilitado y no solo lectura
Sven Bieder
3
@SvenBieder Readonly y los discapacitados tienen un comportamiento completamente diferente. Los campos de solo lectura enviados al servidor en el envío del formulario no lo son los campos deshabilitados.
Naren
3
input[readonly='readonly']solo funcionará si usas HTML como <input readonly="readonly">, no por ejemplo <input readonly>. input[readonly]debería coincidir con ambos.
Mathias Bynens
1
!importantdebería funcionar para anular, a menos que también tenga !importanten la clase de configuración?
Matt K

Respuestas:

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

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

Brusco
fuente
24
En su input[readonly]lugar, debe usarlo como readonlyun atributo booleano que no está diseñado para tener un valor específico.
BoltClock
1
@BoltClock Sí. Consulte la resolución en la respuesta a continuación.
Pal R
¿Cómo puedo hacer que se pueda volver a escribir? ¿Solo quitas el estilo de clase?
Renaro Santos
@RenaroSantos Eso es un cambio de HTML. Eliminar readonly="readonly"de su inputelemento.
Curt
w / IE7 todavía puede usar el selector con jQuery
ladieu
69

Tenga en cuenta que textarea[readonly="readonly"]las obras si se establece readonly="readonly"en HTML pero no funciona si se establece la readOnly-attribute a trueo "readonly"a través de JavaScript.

Para que el selector CSS funcione si configura readOnlycon JavaScript , debe usar el selector textarea[readonly].

Mismo comportamiento en Firefox 14 y Chrome 20.

Para estar seguro, utilizo ambos selectores.

textarea[readonly="readonly"], textarea[readonly] {
...
}
kaka
fuente
18
También puede usarlo textarea[readonly]en su lugar: textarea[readonly="readonly"]se garantiza que todos coincidirán con eso.
BoltClock
23

Para estar seguro, es posible que desee utilizar ambos ...

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

El atributo de solo lectura es un "atributo booleano", que puede estar en blanco o "de solo lectura" (los únicos valores válidos). http://www.whatwg.org/specs/web-apps/current-work/#boolean-attribute

Si está utilizando algo como la .prop('readonly', true)función de jQuery , terminará necesitando [readonly], mientras que si lo está utilizando .attr("readonly", "readonly"), lo necesitará [readonly="readonly"].


Corrección: solo necesitas usar input[readonly]. La inclusión input[readonly="readonly"]es redundante. Ver https://stackoverflow.com/a/19645203/1766230

Luke
fuente
20

Hay muchas respuestas aquí, pero no he visto la que uso:

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

Tenga en cuenta el guión en el pseudo selector. Si la entrada es, readonly="false"también lo captará, ya que este selector detecta la presencia de solo lectura, independientemente del valor. Técnicamente falseno es válido según las especificaciones, pero Internet no es un mundo perfecto. Si necesita cubrir ese caso, puede hacer esto:

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

textarea funciona de la misma manera:

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

Tenga en cuenta que ahora es compatible con HTML no sólo type="text", sino una serie de otros tipos textuales tal number, tel, email, date, time, url, etc. Cada uno tendría que ser añadido al selector.

IAmNaN
fuente
2
Yo tampoco. LOL ¡Sí, tienes razón! Por ahora. :read-onlyy otros selectores de psuedo se han agregado al estándar W3C y se pueden usar con versiones preliminares de IE 10 10547 y superiores.
IAmNaN
6

Hay algunas formas de hacer esto.

El primero es el más utilizado. Funciona en todos los principales navegadores.

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

Mientras que el de arriba seleccionará todas las entradas con readonlyadjunto, este de abajo seleccionará solo lo que desee. Asegúrese de reemplazar democon cualquier tipo de entrada que desee.

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

Esta es una alternativa a la primera, pero no se usa mucho:

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

El :read-onlyselector es compatible con Chrome, Opera y Safari. Firefox utiliza :-moz-read-only. IE no es compatible con el :read-onlyselector.

También puede usar input[readonly="readonly"], pero esto es más o menos lo mismo input[readonly], según mi experiencia.

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

Debería cubrir todos los casos para un campo de entrada de solo lectura ...

Sarga
fuente
input: solo lectura es la "pseudoclase de mutabilidad que tiene como objetivo facilitar el diseño de formularios basado en atributos HTML deshabilitados, de solo lectura y contentables" Como se menciona aquí, css-tricks.com/almanac/selectors/r/read-write-read , varias implementaciones son bastante inestables.
Peater
Esto es extraño, pero solo la entrada [solo lectura] funcionó para mí en FF 58
Pavel_K
3

escribe con mayúscula la primera letra de Only

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

王小 陌
fuente
2

Si selecciona la entrada por la identificación y luego agrega la input[readonly="readonly"]etiqueta en el CSS, algo así como:

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

Eso no funcionará. Debe seleccionar una clase o identificación principal y luego la entrada. Algo como:

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

Mis 2 centavos mientras espero nuevas entradas en el trabajo: D

softwareplay
fuente
"Si selecciona la entrada por el id", que no es el OP, entonces, ¿cómo es esto relevante? Incluso si fuera el caso, te equivocas, solo necesitas eliminar el combinador descendente.
Quentin
AH ok, ¿quieres decir que tengo que escribir algo como input [readonly = "readonly"] # inputID? / me tonto ... tienes razón
softwareplay
1

Use lo siguiente para trabajar en todos los navegadores:

 var readOnlyAttr = $('.textBoxClass').attr('readonly');
    if (typeof readOnlyAttr !== 'undefined' && readOnlyAttr !== false) {
        $('.textBoxClass').addClass('locked');
    }
Pal R
fuente
2
Entonces, espero que su público objetivo no esté en ese 2%.
Bacco
¿Qué incluye la clase 'bloqueada'?
AdiT
$ ('. textBoxClass'). addClass ('bloqueado') incluirá 'bloqueado'
Pal R