2008-10-06 14 views
147

Entre otras ayudas visuales y de texto en el envío de un formulario, después de la validación, estoy coloreando mis cuadros de entrada en rojo para indicar el área interactiva que necesita atención.¿Cómo impido que Chrome deje en color amarillo los cuadros de entrada de mi sitio?

En Chrome (y para los usuarios de la barra Google), la función de autocompletar vuelve a colorear mis formularios de entrada en amarillo. Este es el problema complejo: quiero permitir el autocompletado en mis formularios, ya que acelera el inicio de sesión de los usuarios. Voy a verificar la posibilidad de desactivar el atributo autocompletar si/cuando se produce un error, pero es complejo un poco de codificación para desactivar programáticamente el autocompletado para la entrada única afectada en una página. Esto, para decirlo simplemente, sería un gran dolor de cabeza.

Para evitar este problema, ¿hay algún método más simple para evitar que Chrome vuelva a colorear los cuadros de entrada?

[edit] Probé la importante sugerencia a continuación y no tuvo ningún efecto. Todavía no he revisado la barra Google para ver si el atributo importante funcionaría para eso.

Por lo que puedo ver, no hay otro medio que no sea usar el atributo de autocompletar (que parece funcionar).

+1

esto no es solo un problema en Chrome. La barra de herramientas de Google para otros navegadores realiza el mismo "amarilleo" de los campos de entrada. –

+2

He proporcionado una respuesta para usted que funciona a continuación. –

+7

No entiendo por qué todos hablan de contorno: ninguno, la pregunta es sobre el fondo amarillo, NO el contorno. Y el atributo de autocompletar desactivado NO solucionará el problema, ya que davebug dijo que quería que la función Autocompletar funcionara, pero no el fondo amarillo. –

Respuesta

73

Sé que en Firefox puede usar el atributo autocomplete = "off" para deshabilitar la funcionalidad de autocompletar. Si esto funciona en Chrome (no se ha probado), puede establecer este atributo cuando se encuentre un error.

Esto se puede utilizar tanto para un solo elemento

<input type="text" name="name" autocomplete="off"> 

... así como para todo el formulario

<form autocomplete="off" ...> 
+0

"Voy a verificar la posibilidad de desactivar el atributo autocompletar si/cuando se produce un error, pero es un código complejo para desactivar programáticamente el autocompletado de la única entrada efectuada en una página. " –

+0

Heh ... sí, gracias, aunque supongo que todavía tengo que comprobar en Chrome, ¿verdad? –

+1

para personas que usan raíles forma simple '<% = simple_form_for @user, html: {autocompletar: 'off'} do | f | %> ' – carbonr

0

Si mal no recuerdo, una regla importante en la hoja de estilo para el color de fondo de las entradas anulará la función de autocompletar de la barra de herramientas de Google; presumiblemente lo mismo ocurriría con Chrome.

2

Sí, sería un gran dolor de cabeza, que en mi opinión no vale la pena la devolución. Tal vez podría modificar un poco su estrategia de IU, y en lugar de colorear el cuadro rojo, podría colorear los bordes rojos, o poner una pequeña cinta roja al lado (como la cinta de Gmail "Cargando") que se desvanece cuando la caja está atención.

135

Establecer la propiedad de esquema CSS a ninguno.

input[type="text"], input[type="password"], textarea, select { 
    outline: none; 
} 

En los casos en que el navegador puede añadir un color de fondo, así que esto puede ser fijado por algo así como

:focus { background-color: #fff; } 
+0

Esto solo funciona para el borde, no para el fondo. – pestaa

+9

Antecedentes? ¿No sabía que Chrome agregó un color de fondo también? Si es así, eso se puede solucionar con algo como ': focus {background-color: #fff; } ' –

+2

@ pestaa correcto, esta no es la respuesta correcta, pero sin duda resuelve un problema similar –

14

Mediante el uso de un poco de jQuery puede quitar el estilo de Chrome, manteniendo intacta la funcionalidad de autocompletar .Escribí un breve post sobre ello aquí: http://www.benjaminmiles.com/2010/11/22/fixing-google-chromes-yellow-autocomplete-styles-with-jquery/

if (navigator.userAgent.toLowerCase().indexOf("chrome") >= 0) { 
$(window).load(function(){ 
    $('input:-webkit-autofill').each(function(){ 
     var text = $(this).val(); 
     var name = $(this).attr('name'); 
     $(this).after(this.outerHTML).remove(); 
     $('input[name=' + name + ']').val(text); 
    }); 
});} 
+0

¡Gracias por la pista! Sin embargo, después de publicar el formulario, hacer clic en el botón Atrás, el punto culminante amarillo volvió. He extendido tu fragmento (ver mi respuesta) para cubrir esto. – 321X

+0

+1 @Benjamin buena solución, parpadea un poco el amarillo pero se arregla al final;) ​​ – sbaaaang

7

para quitar el borde de todos los campos que puede utilizar lo siguiente:

*:focus { outline:none; }

Para quitar la frontera para determinados campos Basta con aplicar este clase de los campos de entrada que desee:

.nohighlight:focus { outline:none; }

Por supuesto, puede cambiar la frontera como usted desea, así:

.changeborder:focus { outline:Blue Solid 4px; }

(De Bill Beckelman: Override Chrome's Automatic Border Around Active Fields Using CSS)

+1

*: focus {outline: none; } hizo el truco para mí en Chrome. +1 – Doidgey

+1

-1 pregunta sobre autofill, no foco – griffin

-1

Con Mootools

function fixchromeyellow() 
{ 
    if (navigator.userAgent.toLowerCase().indexOf("chrome") >= 0) 
    { 
     $$('input["input:-webkit-autofill"]').each(function(el) 
     { 
     el.clone().inject(el,"after"); 
     el.destroy(); 
     }); 
    } 
} 

window.setTimeout(fixchromeyellow, 500); 

0
input:focus { outline:none; } 

Eso funcionó muy bien para mí, pero lo más probable es mantener las cosas uniforme en su sitio el va a querer también incluir esto en su CSS para áreas de texto:

textarea:focus { outline:none; } 

También puede parecer obvio para la mayoría, excepto por principiantes también se puede establecer a un color como tal:

input:focus { outline:#HEXCOD SOLID 2px ; } 
1

Es un pedazo de la torta con jQuery:

if ($.browser.webkit) { 
    $("input").attr('autocomplete','off'); 
} 

O si quieres ser un poco más selectivo, añadir un nombre de clase para un selector.

1

Después de aplicar @Benjamin su solución, descubrí que presionar el botón de retroceso todavía me daría el resaltado amarillo.

Mi solución alguna manera de evitar que esto resaltado amarillo que volver es decir, aplicando la siguiente javascript jQuery:

<script type="text/javascript"> 
    $(function() { 
     if (navigator.userAgent.toLowerCase().indexOf("chrome") >= 0) { 
     var intervalId = 0; 
      $(window).load(function() { 
       intervalId = setInterval(function() { // << somehow this does the trick! 
        if ($('input:-webkit-autofill').length > 0) { 
         clearInterval(intervalId); 
         $('input:-webkit-autofill').each(function() { 
          var text = $(this).val(); 
          var name = $(this).attr('name'); 
          $(this).after(this.outerHTML).remove(); 
          $('input[name=' + name + ']').val(text); 
         }); 
        } 
       }, 1); 
      }); 
     } 
    }); 
</script> 

creo que sirve cualquiera !!

1

Esto funciona. Lo mejor de todo es que puedes usar los valores de rgba (el hack de recuadro de la sombra del recuadro no funciona con rgba). Este es un pequeño cambio de la respuesta de @ Benjamin. Estoy usando $ (document) .ready() en lugar de $ (ventana) .load(). Parece funcionar mejor para mí, ahora hay mucho menos FOUC. No creo que existan desventajas al usar $ (document) .ready().

if (navigator.userAgent.toLowerCase().indexOf("chrome") >= 0) { 
    $(document).ready(function() { 
     $('input:-webkit-autofill').each(function(){ 
      var text = $(this).val(); 
      var name = $(this).attr('name'); 
      $(this).after(this.outerHTML).remove(); 
      $('input[name=' + name + ']').val(text); 
     }); 
    }); 
}; 
47

esto es exactamente lo que estás buscando!

// Just change "red" to any color 
input:-webkit-autofill { 
    -webkit-box-shadow: 0 0 0px 1000px red inset; 
} 
+0

este es un gran truco. Gracias – Jason

+0

Yo agregaría el foco a eso también: D 'input: -webkit-autofill, input: focus: -webkit-autofill { -webkit-box-shadow: 0 0 0px 1000px #FFF inset; } ' – StephanieQ

+0

hi @JStormThaKid, He utilizado este ..., pero no funcionó para las entradas correctas ... favor responder a esta ... – mithu

0

MEJOR SOLUCIÓN hasta el momento (en menos)

input:-webkit-autofill { 
    box-shadow: 0 0 0 1000px white inset; 

    &:hover, 
    &:focus { 
     box-shadow: 0 0 0 1000px white inset; 
    } 
} 
1

para las versiones de hoy, esto también funciona si se coloca en una de las dos entradas de inicio de sesión. También arregle la versión 40+ y el último problema de Firefox.

<input readonly="readonly" onfocus="this.removeAttribute('readonly');" /> 
Cuestiones relacionadas