Come posso impedire a Chrome di ingiallire le caselle di input del mio sito?


151

Tra gli altri ausili visivi e di testo per l'invio di un modulo, post-convalida, sto colorando le mie caselle di input in rosso per indicare l'area interattiva che necessita di attenzione.

Su Chrome (e per gli utenti di Google Toolbar) la funzione di riempimento automatico ridimensiona i miei moduli di input in giallo. Ecco il problema complesso: desidero consentire il completamento automatico nei miei moduli, in quanto accelera l'accesso degli utenti. Ho intenzione di verificare la possibilità di disattivare l'attributo di completamento automatico se / quando si verifica un errore, ma è un problema complesso un po 'di codifica per disattivare a livello di programmazione il completamento automatico per il singolo input interessato in una pagina. Questo, per dirla semplicemente, sarebbe un grosso mal di testa.

Quindi, per cercare di evitare questo problema, esiste un metodo più semplice per impedire a Chrome di ricolorare nuovamente le caselle di input?

[modifica] Ho provato il! suggerimento importante di seguito e non ha avuto alcun effetto. Non ho ancora controllato Google Toolbar per vedere se l'attributo! Important funzionerebbe per questo.

Per quanto ne so, non c'è altro mezzo che usare l'attributo di completamento automatico (che sembra funzionare).


1
questo non è solo un problema in Chrome. Google Toolbar per altri browser esegue lo stesso "ingiallimento" dei campi di input.
Carlton Jenke,

2
Ti ho fornito una risposta che funziona di seguito.
John Leidegren,

8
Non capisco perché tutti parlino di contorno: nessuno, la domanda riguarda lo sfondo del giallo, NON il contorno. E l'attributo di completamento automatico impostato su OFF NON risolverà il problema, poiché davebug ha detto che vuole che il completamento automatico funzioni, ma non lo sfondo giallo.

Risposte:


74

So che in Firefox è possibile utilizzare l'attributo autocomplete = "off" per disabilitare la funzionalità di completamento automatico. Se funziona in Chrome (non testato), è possibile impostare questo attributo quando si verifica un errore.

Questo può essere usato sia per un singolo elemento

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

... oltre che per un intero modulo

<form autocomplete="off" ...>

"Ho intenzione di verificare la possibilità di disattivare l'attributo di completamento automatico se / quando si verifica un errore, ma è un po 'complesso di codifica disattivare automaticamente il completamento automatico per il singolo input effettuato su una pagina."
Dave Rutledge,

Heh ... sì, grazie, anche se suppongo che debba ancora controllare in Chrome, giusto?
Dave Rutledge,

2
per le persone che usano le rotaie in forma semplice<%= simple_form_for @user, html: { autocomplete: 'off' } do |f| %>
carbonr

mi dispiace dire che questo non mi ha aiutato
M.Islam,

136

Impostare la proprietà del contorno CSS su none.

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

Nei casi in cui il browser può aggiungere anche un colore di sfondo, questo può essere risolto da qualcosa di simile

:focus { background-color: #fff; }

9
Sfondo? Non sapevo che anche Chrome avesse aggiunto un colore di sfondo? In tal caso, ciò può essere risolto da qualcosa di simile:focus { background-color: #fff; }
John Leidegren,

Uccidere il contorno con CSS potrebbe impedire l'ingiallimento ma non impedirà il riempimento automatico effettivo. Se vuoi farlo, è importante usare l'attributo di completamento automatico, non standard o no.
Tom Boutell,

2
@pestaa corretto, questa non è la risposta giusta, ma risolve sicuramente un problema simile
David Lawson

Fai attenzione quando gestisci tablet e altro, il browser Android predefinito è un po 'difficile da usare senza il contorno. Abbastanza facile da applicare anche ai browser non mobili :)
Tim Post

Un piccolo miglioramento: input[type=text], input[type=password], input[type=email], textarea, select { outline: none; }
Felipe Lima,

56

questo è esattamente quello che stai cercando!

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

questo è un grande trucco. Grazie
Jason il

Vorrei aggiungere attenzione anche a quello: Dinput:-webkit-autofill, input:focus:-webkit-autofill { -webkit-box-shadow: 0 0 0px 1000px #FFF inset; }
StephanieQ

ciao @JStormThaKid, ho usato questo ..., ma non ha funzionato per gli input corretti ... per favore rispondi a questo ...
mithu,

Grazie per aver risposto alla domanda che ha effettivamente posto! Avevo quasi iniziato a perdere la speranza.
BVernon,

La migliore risposta qui, volevo ancora il completamento automatico di Google, quindi grazie
Spangle

14

Usando un po 'di jQuery puoi rimuovere lo stile di Chrome mantenendo intatta la funzionalità di completamento automatico. Ho scritto un breve post al riguardo qui: 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);
    });
});}

Grazie per il suggerimento! Tuttavia, dopo aver pubblicato il modulo, facendo clic sul pulsante Indietro, è tornato il punto culminante giallo. Ho esteso il tuo frammento (vedi la mia risposta) per coprire questo.
321X

+1 @Benjamin bella soluzione, ma Flashs po 'il giallo, ma fissa alla fine;)
itsme

7

Per rimuovere il bordo per tutti i campi è possibile utilizzare quanto segue:

*:focus { outline:none; }

Per rimuovere il bordo per selezionare i campi basta applicare questa classe ai campi di input desiderati:

.nohighlight:focus { outline:none; }

Ovviamente puoi anche cambiare il bordo come desideri:

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

(Da Bill Beckelman: Sostituisci il bordo automatico di Chrome attorno ai campi attivi utilizzando CSS )


2

Sì, sarebbe un grosso mal di testa, che secondo me non vale il ritorno. Forse potresti modificare un po 'la tua strategia di interfaccia utente e invece di colorare la scatola in rosso, puoi colorare i bordi in rosso o mettere un piccolo nastro rosso accanto ad essa (come il nastro "Caricamento" delle e-mail che svanisce quando la casella è in messa a fuoco.


1

È un gioco da ragazzi con jQuery:

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

O se vuoi essere un po 'più selettivo, aggiungi un nome di classe per un selettore.



1

Dopo aver applicato @Benjamin alla sua soluzione, ho scoperto che premere il pulsante Indietro mi avrebbe comunque dato la luce gialla.

La mia soluzione in qualche modo per impedire il ritorno di questo momento saliente giallo è l'applicazione del seguente jQuery javascript:

<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>

Spero che aiuti chiunque !!


1

Questo funziona Soprattutto, è possibile utilizzare i valori rgba (l'hack inset box-shadow non funziona con rgba). Questa è una leggera modifica della risposta di @ Benjamin. Sto usando $ (documento) .ready () invece di $ (finestra) .load (). Sembra funzionare meglio per me - ora c'è molto meno FOUC. Non credo ci siano e svantaggi nell'usare $ (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);
        });
    });
};

1

per le versioni odierne, funziona anche se inserito in uno dei due input di accesso. Risolvi anche la versione 40+ e la versione successiva di Firefox.

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

0
input:focus { outline:none; }

Per me ha funzionato benissimo, ma è molto probabile che mantenga le cose uniformi sul tuo sito e che vorrai includerlo anche nel tuo CSS per le textareas:

textarea:focus { outline:none; }

Inoltre può sembrare ovvio per la maggior parte, ma per i principianti puoi anche impostarlo su un colore in quanto tale:

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

-1

Se ricordo bene, una! Regola importante nel foglio di stile per il colore di sfondo degli input sovrascriverà il completamento automatico della barra degli strumenti di Google - presumibilmente lo stesso sarebbe vero per Chrome.

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.