Color de texto de entrada desactivado


93

El HTML simple a continuación se muestra de manera diferente en los navegadores basados ​​en Firefox y WebKit (verifiqué en Safari, Chrome y iPhone).

En Firefox tanto el borde como el texto tienen el mismo color ( #880000), pero en Safari el texto se vuelve un poco más claro (como si tuviera algo de transparencia aplicada).

¿Puedo solucionar esto de alguna manera (eliminar esta transparencia en Safari)?

<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <title></title>
    <style type="text/css">
    input:disabled{
        border:solid 1px #880000;
        background-color:#ffffff;
        color:#880000;
    }
    </style>
</head>
<body>
    <form action="">
        <input type="text" value="disabled input box" disabled="disabled"/>
    </form>
</body>
</html>

También noté esto, para mí esto es un error, ya que cuando pones background-color: white de la entrada volverá a mostrar el color correctamente. Además, la opacidad tiene poco efecto. Aunque el -webkit-text-fill-color: # 880000 funcionará
Miguel

Respuestas:


235
-webkit-text-fill-color: #880000;
opacity: 1; /* required on iOS */

51
Quería que mi cuadro de entrada deshabilitado se viera como uno normal. Esto es lo único que funcionaría en Safari Mobile. -webkit-text-fill-color: rgba (0, 0, 0, 1); -Opacidad del kit de web: 1; fondo: blanco;
Ryan

11
@Ryan tiene razón: la opacidad debe estar configurada 1para Mobile Safari.
David Jones

7
opacity:1también es necesario.
Marcel Falliere

3
La opacidad no es necesaria en las versiones actuales de Safari, a partir del verano de 2016.
Andy Mercer

2
¡Salvó mi día! Sin embargo, también afecta la coloración del color del placeholdertexto del inputelemento. En caso de que también necesite una solución, consulte este enlace: css-tricks.com/almanac/selectors/p/placeholder
Lentyai

43

Los navegadores webkit de teléfonos y tabletas (Safari y Chrome) y el IE de escritorio tienen una serie de cambios predeterminados en los elementos de formulario deshabilitados que deberá anular si desea modificar el estilo de las entradas deshabilitadas.

-webkit-text-fill-color:#880000; /* Override iOS / Android font color change */
-webkit-opacity:1; /* Override iOS opacity change affecting text & background color */
color:#880000; /* Override IE font color change */

6

es una pregunta interesante y he intentado muchas modificaciones para ver si puedo hacerlo funcionar, pero nada funciona. Los navegadores modernos en realidad usan sus propias hojas de estilo para decirle a los elementos cómo se muestran, por lo que tal vez si puede olfatear la hoja de estilo de Chrome, pueda ver qué estilos están imponiendo. Me interesará mucho el resultado y si no tienes uno me dedicaré un poco de tiempo a buscarlo más tarde cuando tenga tiempo que perder.

FYI,

opacity: 1!important;

no lo anula, por lo que no estoy seguro de que sea opacidad.


¡Gracias! No pude encontrar una explicación (nada de eso en la hoja de estilo del agente de usuario de Chrome, solo "color de fondo: rgb (235, 235, 228)" para entradas deshabilitadas) y estoy usando una solución alternativa, pero aún tengo curiosidad por saber qué está pasando el ...
Incidentemente

Steve, gracias por el esfuerzo, pero te sugiero que en el futuro publiques esto como un comentario en lugar de una respuesta.
avernet

6

Puede cambiar el color a #440000solo para Safari, pero en mi humilde opinión, la mejor solución sería no cambiar el aspecto del botón en absoluto . De esta forma, en todos los navegadores de todas las plataformas, se verá exactamente como los usuarios esperan.


5

ACTUALIZADO 2019:

Combinando ideas de esta página en una solución de "configurar y olvidar".

input:disabled, textarea:disabled, input:disabled::placeholder, textarea:disabled::placeholder {
  -webkit-text-fill-color: currentcolor; /* 1. sets text fill to current `color` for safari */
  opacity: 1; /* 2. correct opacity on iOS */
}

4

Puede utilizar el atributo readonly en lugar del atributo disabled, pero luego deberá agregar una clase porque no hay una entrada de pseudo-clase: readonly.

<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title></title>
<style type="text/css">
button.readonly{
    border:solid 1px #880000;
    background-color:#ffffff;
    color:#880000;
}
</style>
</head>
<body>
<form action="">
    <button type="button" readonly="readonly" class="readonly">disabled input box</button>
</form>
</body>
</html>

Tenga en cuenta que una entrada deshabilitada y una entrada de solo lectura no son lo mismo. Una entrada de solo lectura puede tener foco y enviará valores al enviar. Mira w3.org


gracias hombre sí, esta fue mi primera idea también, pero no funciona para mí debido al enfoque: en el iPhone, el teclado aparece cuando un usuario toca un elemento de solo lectura, y esto es confuso. He encontrado mi solución y mi La pregunta es más bien "teórica": ¿por qué este comportamiento?
Incidentemente

Una solución alternativa interesante: el problema del enfoque también plantea problemas de usabilidad, en particular para las personas que utilizan lectores de pantalla. En la mayoría de los casos, simplemente no querrá que los usuarios puedan tabular campos de solo lectura / deshabilitados en un formulario.
avernet

4

para @ryan

Quería que mi cuadro de entrada deshabilitado se viera como uno normal. Esto es lo único que funcionaría en Safari Mobile.

-webkit-text-fill-color: rgba(0, 0, 0, 1);
-webkit-opacity: 1;
background: white;

3

Si desea solucionar el problema de todas las entradas deshabilitadas, puede definir -webkit-text-fill-colora currentcolor, por colorlo que se utilizará la propiedad de la entrada.

input[disabled] {
   -webkit-text-fill-color: currentcolor;
}

Mira ese violín en Safari https://jsfiddle.net/u549yk87/3/


2

Esta pregunta es muy antigua, pero pensé que publicaría una solución de webkit actualizada. Simplemente use el siguiente CSS:

input::-webkit-input-placeholder {
  color: #880000;
}

3
y para Firefox, use input: -moz-placeholder
stephan.com

1
eh ... esto es para el atributo de marcador de posición, no creo que tenga un efecto en los campos deshabilitados. -webkit-text-fill-colorSin embargo
philfreo

0

¿Puedes usar un botón en lugar de una entrada?

<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <title></title>
    <style type="text/css">
    button:disabled{
        border:solid 1px #880000;
        background-color:#ffffff;
        color:#880000;
    }
    </style>
</head>
<body>
    <form action="">
        <button type="button" disabled="disabled">disabled input box</button>
    </form>
</body>
</html>

no realmente ... en mi aplicación real, esos cuadros de texto generalmente están habilitados y se usan para la entrada, y solo bajo ciertas condiciones se deshabilitan con JavaScript, puedo encontrar una solución alternativa (como, reemplazar <input /> con un <div> < / div> en lugar de configurar 'deshabilitado') - pero realmente se siente mal
Incidentemente
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.