Como impedir o Chrome de amarelar as caixas de entrada do meu site?

151

Entre outros textos e recursos visuais em um envio de formulário, pós-validação, estou colorindo minhas caixas de entrada em vermelho para indicar a área interativa que precisa de atenção.

No Chrome (e para usuários da Barra de Ferramentas Google), o recurso de preenchimento automático volta a colorir meus formulários de entrada em amarelo. Aqui está a questão complexa: desejo que o preenchimento automático seja permitido nos meus formulários, pois acelera o login dos usuários. Vou verificar a capacidade de desativar o atributo de preenchimento automático se / quando ocorrer um erro, mas é um processo complexo um pouco de codificação para desativar programaticamente o preenchimento automático da única entrada afetada em uma página. Simplificando, isso seria uma grande dor de cabeça.

Então, para tentar evitar esse problema, existe algum método mais simples de impedir que o Chrome recolorir as caixas de entrada?

[edit] Tentei a sugestão importante abaixo e ela não teve efeito. Ainda não verifiquei a Barra de Ferramentas Google para ver se o atributo! Important funcionaria para isso.

Até onde eu sei, não há outro meio senão usar o atributo de preenchimento automático (que parece funcionar).

Dave Rutledge
fonte
1
isso não é apenas um problema no Chrome. A Barra de Ferramentas Google para outros navegadores faz o mesmo "amarelecimento" dos campos de entrada.
Carlton Jenke 06/10/08
2
Forneci uma resposta para você, que funciona abaixo.
31420 John Leidegren
8
Não entendo por que todo mundo está falando sobre o esboço: nenhum, a pergunta é sobre o histórico do yello, NÃO o esboço. E o atributo de preenchimento automático desativado NÃO resolverá o problema, pois davebug disse que deseja que o preenchimento automático funcione, mas não o fundo amarelo.

Respostas:

74

Eu sei que no Firefox você pode usar o atributo autocomplete = "off" para desativar a funcionalidade de preenchimento automático. Se isso funcionar no Chrome (não foi testado), você poderá definir esse atributo quando um erro for encontrado.

Isso pode ser usado para um único elemento

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

... bem como para um formulário inteiro

<form autocomplete="off" ...>
Ben Hoffstein
fonte
"Vou verificar a capacidade de desativar o atributo de preenchimento automático se / quando houver um erro acionado, mas é um pouco complexo de codificação desativar programaticamente o preenchimento automático para a única entrada efetuada em uma página".
Dave Rutledge
Heh ... sim, obrigado, embora eu suponha que ainda precise fazer check-in no Chrome, certo?
Dave Rutledge
2
para pessoas que usam trilhos forma simples<%= simple_form_for @user, html: { autocomplete: 'off' } do |f| %>
carbonr
Lamento dizer que isso não me ajudar
M.Islam
136

Defina a propriedade de estrutura de tópicos CSS como none.

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

Nos casos em que o navegador também pode adicionar uma cor de fundo, isso pode ser corrigido por algo como

:focus { background-color: #fff; }
John Leidegren
fonte
9
Fundo? Eu não sabia que o Chrome também adicionou uma cor de plano de fundo? Nesse caso, isso pode ser corrigido por algo como:focus { background-color: #fff; }
John Leidegren
Matar o contorno com CSS pode impedir o amarelecimento, mas não impede o preenchimento automático real. Se você quiser fazer isso, é importante usar o atributo de preenchimento automático, fora do padrão ou não.
Tom Boutell
2
@pestaa correta, esta não é a resposta certa, mas certamente resolve um problema semelhante
David Lawson
Tome cuidado ao lidar com tablets e outras coisas, pois o navegador padrão do Android é um pouco difícil de usar sem o esboço. Fácil suficiente para aplicar a navegadores não móveis embora :)
Tim Publicar
Uma pequena melhoria: input[type=text], input[type=password], input[type=email], textarea, select { outline: none; }
Felipe Lima
56

é exatamente isso que você está procurando!

// Just change "red" to any color
input:-webkit-autofill {
    -webkit-box-shadow: 0 0 0px 1000px red inset;
}
JStormThaKid
fonte
Este é um ótimo truque. Obrigado
Jason
Gostaria de acrescentar foco a isso também: Dinput:-webkit-autofill, input:focus:-webkit-autofill { -webkit-box-shadow: 0 0 0px 1000px #FFF inset; }
StephanieQ:
oi @JStormThaKid, eu usei este ..., mas não funcionou para entradas corretas ... por favor responder a esta ...
mithu
Obrigado por responder à pergunta que ele realmente fez! Eu quase comecei a perder a esperança.
BVernon
Melhor resposta aqui, eu ainda queria google autocomplete, por isso obrigado
Spangle
14

Usando um pouco de jQuery, você pode remover o estilo do Chrome, mantendo intacta a funcionalidade de preenchimento automático. Eu escrevi um pequeno post sobre isso aqui: 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);
    });
});}
Benjamin
fonte
Obrigado pela dica! No entanto, depois de postar o formulário, clicando no botão Voltar, o destaque amarelo voltou. Estendi seu snippet (veja minha resposta) para cobrir isso.
321X
+1 @Benjamin nice solution, pisca um pouco o amarelo, mas corrige no final;)
itsme
7

Para remover a borda de todos os campos, você pode usar o seguinte:

*:focus { outline:none; }

Para remover a borda dos campos selecionados, basta aplicar esta classe aos campos de entrada que você deseja:

.nohighlight:focus { outline:none; }

Obviamente, você também pode alterar a fronteira como desejar:

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

(De Bill Beckelman: Substitua a borda automática do Chrome em torno dos campos ativos usando CSS )

Kita
fonte
2

Sim, seria uma grande dor de cabeça, que na minha opinião não vale o retorno. Talvez você possa ajustar um pouco sua estratégia de interface do usuário e, em vez de pintar a caixa de vermelho, você pode colorir as bordas de vermelho ou colocar uma pequena fita vermelha ao lado (como a fita "Carregando" do gmails) que desaparece quando a caixa está foco.

Mostlyharmless
fonte
1

É um pedaço de bolo com jQuery:

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

Ou, se você quiser ser um pouco mais seletivo, adicione um nome de classe para um seletor.

Hohner
fonte
1

A maneira mais simples na minha opinião é:

  1. Obtenha http://www.quirksmode.org/js/detect.html
  2. Use este código:

    if (BrowserDetect.browser == "Chrome") {
      jQuery('form').attr('autocomplete','off');
    };
Tim
fonte
1

Depois de aplicar a solução de @Benjamin, descobri que pressionar o botão Voltar ainda me daria o destaque amarelo.

De alguma forma, minha solução para impedir que esse destaque amarelo volte é aplicando o seguinte 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>

Espero que ajude alguém !!

321X
fonte
1

Isso funciona. O melhor de tudo é que você pode usar valores rgba (o box-shadow inset hack não funciona com rgba). Este é um pequeno ajuste na resposta de @ Benjamin. Estou usando $ (document) .ready () em vez de $ (window) .load (). Parece funcionar melhor para mim - agora há muito menos FOUC. Não acredito que haja desvantagens no uso de $ (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);
        });
    });
};
Vin
fonte
1

para as versões de hoje, isso também funciona se for colocado em uma das duas entradas de login. Corrija também a versão 40+ e o problema tardio do Firefox.

<input readonly="readonly" onfocus="this.removeAttribute('readonly');" />
hsobhy
fonte
0
input:focus { outline:none; }

Isso funcionou muito bem para mim, mas é mais provável que você mantenha as coisas uniformes em seu site, incluindo também isso no CSS para áreas de texto:

textarea:focus { outline:none; }

Também pode parecer óbvio para a maioria, mas para iniciantes, você também pode configurá-lo para uma cor como tal:

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

Se bem me lembro, uma regra importante na folha de estilo para a cor de fundo das entradas substituirá o preenchimento automático da barra de ferramentas do Google - presumivelmente o mesmo seria verdade no Chrome.

Quentin
fonte