Автозаполнение формы Google Chrome и ее желтый фон

У меня проблема с дизайном Google Chrome и его функцией автозаполнения форм. Если Chrome запоминает логин / пароль, он меняет цвет фона на желтый.

Вот несколько скриншотов:

alt textальтернативный текст

Как удалить этот фон или просто отключить автозаполнение?


person hsz    schedule 27.05.2010    source источник
comment
Я также хотел бы посмотреть, есть ли на это ответ.   -  person Kyle    schedule 27.05.2010
comment
Что касается стиля, этот цвет может серьезно подходить к элементам дизайна, таким как выделение во входных тегах в Chrome, я бы больше хотел изменить цвет, чем отключить его.   -  person Kyle    schedule 27.05.2010
comment
Google, кажется, до некоторой степени признает эту проблему. См. code.google.com/p/chromium/issues/detail?id = 46543   -  person MitMaro    schedule 12.11.2010
comment
@ANeves Что ж, это серьезная проблема, когда у вас есть сайт с тяжелым дизайном, где вы используете фоновые методы или методы спрайтов, чтобы показать пользователю, что является желаемым значением в заданном поле. Поэтому, если хром переопределит это фоновое изображение своим цветом фона, пользователи не увидят то, что вы хотите им показать.   -  person ncubica    schedule 05.03.2012
comment
ANeves - причина, по которой мне нужно отключить автозаполнение, заключается в том, что пользователь будет менеджером, который будет использовать эту страницу для добавления других пользователей в систему, поэтому последнее, что он хочет, - это автозаполнение имени пользователя и пароля менеджера. Также я обнаружил, что поле «Пароль» окрашивается, а поле «Повторить пароль» - нет.   -  person Peter Smartt    schedule 13.08.2013
comment
@ANeeves Конкретный пример того, почему я это делаю (и почему я здесь), заключается в том, что автоматическая стилизация Chrome при автозаполнении заставляет фоновое изображение исчезать при вводе имени пользователя и пароля. Если не автозаполнение, внутри каждого ввода есть значок пользователя и пароля. Не так уж и сложно понять :)   -  person p e p    schedule 01.04.2014
comment
Вместо того, чтобы отключать желтый фон, просто не используйте изображения для своих форм, и это будет выглядеть намного лучше: i.imgur.com/DemnvGy.png   -  person fregante    schedule 17.11.2014
comment
Чтобы отключить автозаполнение, вы можете добавить autocomplete = off в свой элемент ввода, например ‹Тип ввода = идентификатор текста = автозаполнение ввода = выключено›   -  person joe_young    schedule 14.12.2014
comment
Просто дополнительная информация: меня это укусило, когда у меня есть поле с паролем. Мои поля автоматически подсвечиваются (желтым) и заполняются странным значением. И я нашел решение здесь: zigpress.com/2014/ 11/22 / stop-chrome-messing-forms ... Решение находится в разделе «Отключить автозаполнение Google Chrome ... добавить скрытые поля».   -  person Cokorda Raka    schedule 21.07.2015
comment
Пожалуйста, проверьте мой обходной путь здесь: stackoverflow.com/questions/15738259/dispting -chrome-autofill /   -  person Fareed Alnamrouti    schedule 16.03.2016
comment
@hsz Пожалуйста, подумайте об изменении отмеченного ответа, мой больше не применяется, и другой ответ - гораздо лучшее решение.   -  person Kyle    schedule 06.07.2016


Ответы (28)


Измените «белый» на любой желаемый цвет.

input:-webkit-autofill {
    -webkit-box-shadow: 0 0 0 1000px white inset !important;
}
person Fareed Alnamrouti    schedule 07.01.2013
comment
отличная идея. Я бы предпочел использовать 50 или 100 всякий раз, когда будет достаточно (поля ввода обычного размера), чтобы избежать потенциального снижения производительности на более слабых устройствах. (И нет необходимости в пикселях после 0) - person Frank Nocke; 02.01.2014
comment
Обожаю этот хак! Замечательная мысль ... Все убирают автозаполнение. Я хотел оставить автозаполнение включенным, чтобы просто покататься по уродливому желтому цвету. - person Travis; 10.01.2014
comment
Не работает, если за полем ввода есть фоновые изображения, просто заполните всю область белым цветом. Я перепробовал все решения на этой странице, включая решения на основе jquery, и они не сработали для меня, в конце концов мне пришлось добавить autocomplete = off в поле. - person Myke Black; 28.03.2014
comment
Думаю, хороший компромисс только для CSS. Пометьте сообщенную проблему пометкой, чтобы побудить разработчиков Google исправить ее code.google. ru / p / chromium / issues / detail? id = 46543 - person Adrien Be; 27.05.2014
comment
Странно, это исправляет цвет ... но теперь Chrome автоматически заполняет поля имени пользователя и пароля. Нет, Google, я не вхожу в систему с моей формой создания нового пользователя ... - person Cerin; 29.05.2014
comment
Чтобы также задать стиль цвета текста, используйте -webkit-text-fill-color - см. этот вопрос - person Erwin Wessels; 08.07.2014
comment
это удаляет другие проверки jquery и CSS из текстового поля :( - person Nivedita; 09.08.2014
comment
Если вы хотите сохранить исходную тень с помощью Bootstrap, вы можете использовать: -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), inset 0 0 0 50px white; - person ; 19.08.2014
comment
хороший хак! ни одно из других решений не помогло мне. Я использую эту тень окна (процесс не требуется): -webkit-box-shadow: inset 0 100px 0 white; - person Ali Gonabadi; 28.08.2014
comment
Это сработало, но мне также пришлось установить класс input: -webkit-autofill: focus. - person C.M.; 29.12.2015
comment
есть ошибка, возможно, синтаксис не изменился, но теперь это работает: box-shadow: inset 0 0 0 1000px white !important; - person Muhammad Umer; 01.04.2016
comment
это не лучшее решение, потому что оно также скрывает фоновые изображения. - person Mulgard; 21.05.2016
comment
Да, хороший взлом, но, к сожалению, не работает для прозрачных полей с фоновыми изображениями ... - person Tino; 21.07.2016
comment
что, если мне нужно, чтобы цвет был прозрачным? - person George Carlin; 23.09.2017
comment
Не играет хорошо, если на поле нанесено несколько теней. У меня есть еще одна вставка тени, чтобы получить эффект вырезания поля из моей страницы, и в сочетании с этим левая и правая сторона (с радиусом границы) по-прежнему становятся желтыми. Для проверки: используйте более темный цвет, чем «белый». - person Streching my competence; 29.01.2019
comment
Хорошее решение xD - person Juan; 08.02.2019

Если вам нужны прозрачные поля ввода, вы можете использовать переход и задержку перехода.

input:-webkit-autofill,
input:-webkit-autofill:hover,
input:-webkit-autofill:focus,
input:-webkit-autofill:active {
    -webkit-transition-delay: 9999s;
    -webkit-transition: color 9999s ease-out, background-color 9999s ease-out;
}
person Gísli Freyr Svavarsson    schedule 10.09.2015
comment
Лучшее решение для меня, поскольку значения цвета RGBA не работали в -webkit-box-shadow. Также устраняется необходимость указывать значения цвета для этого объявления: значения по умолчанию по-прежнему будут применяться. - person Sébastien; 13.10.2016
comment
еще лучше использовать задержку перехода вместо его продолжительности, чтобы вообще не было смешивания цветов - person antoine129; 25.09.2017
comment
хорошо, но по какой-то причине мне пришлось переместить это правило в конец файла, иначе не сработало - person Igor Mizak; 14.12.2017
comment
Это то, что я искал! Спасибо! - person Akhmedzianov Danilian; 27.10.2018

Решение здесь:

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);
        });
    });
}
person Alessandro Benedetti    schedule 16.11.2010
comment
Это сработало, тогда как главный ответ - нет. Однако я думаю, что не буду пытаться изменить поведение с момента а). это javascript, поэтому есть секунда между его работой и нет (пока не загрузится js) и b). это может сбить с толку пользователя Chrome, который привык к поведению по умолчанию. - person ; 19.06.2013
comment
Мой хром просто повторно применяет желтый цвет к новому вводу :( - person Dustin Silk; 30.04.2015
comment
Пожалуйста, не надо. Это не будет работать с любой JS-структурой, только для статических веб-сайтов. - person Akhmedzianov Danilian; 27.10.2018

В Firefox вы можете отключить все автозаполнение в форме с помощью атрибута autocomplete = "off / on". Аналогичным образом автозаполнение отдельных элементов может быть установлено с использованием одного и того же атрибута.

<form autocomplete="off" method=".." action="..">  
<input type="text" name="textboxname" autocomplete="off">

Вы можете проверить это в Chrome, так как он должен работать.

person Kinlan    schedule 27.05.2010
comment
В настоящее время поворот autocomplete="off" недоступен. - person João; 04.04.2012
comment
К сожалению, это решение больше не работает в Chrome. - person henrywright; 07.08.2014
comment
Это крайне не рекомендуется, поскольку вы на самом деле не решаете настоящую проблему здесь. вместо этого вы создаете новый, расстраивая пользователей, потому что им приходится вручную вводить свои (предположительно) данные для входа (если они даже помнят, какими они были) - person xorinzor; 13.01.2017

Если вы хотите сохранить автозаполнение, а также любые данные, прикрепленные обработчики и функции, прикрепленные к вашим элементам ввода, попробуйте этот сценарий:

if (navigator.userAgent.toLowerCase().indexOf("chrome") >= 0)
{
    var _interval = window.setInterval(function ()
    {
        var autofills = $('input:-webkit-autofill');
        if (autofills.length > 0)
        {
            window.clearInterval(_interval); // stop polling
            autofills.each(function()
            {
                var clone = $(this).clone(true, true);
                $(this).after(clone).remove();
            });
        }
    }, 20);
}

Он опрашивает, пока не найдет какие-либо элементы автозаполнения, клонирует их, включая данные и события, затем вставляет их в DOM в том же месте и удаляет оригинал. Он прекращает опрос, как только находит, что нужно клонировать, поскольку автозаполнение иногда занимает секунду после загрузки страницы. Это вариант предыдущего примера кода, но более надежный и сохраняет максимально возможную функциональность.

(Подтверждена работа в Chrome, Firefox и IE 8.)

person Jason    schedule 13.07.2011
comment
Это было единственное решение, которое я нашел работающим, БЕЗ отключения автозаполнения. - person Xeroxoid; 19.09.2011
comment
возможно, установка интервалов не нужна, поскольку хром автозаполняется на window.load? - person Timo Huovinen; 22.11.2011
comment
Работает без удаления автозаполнения, гораздо лучшее решение, чем те, которые получили миллионы голосов «за». - person Ally; 06.09.2012
comment
Другие решения не сработали для меня, даже самое популярное, но это сработало. Проблема, противоположная тому, что @Timo сказал выше, заключается в том, что Chrome не выполняет автозаполнение прямо в window.load. Несмотря на то, что это сработало, одна проблема заключается в том, что при отсутствии элементов -webkit-autofill цикл выполняется непрерывно. Вам даже не нужен интервал, чтобы это сработало. Просто установите тайм-аут с задержкой в ​​50 миллисекунд, и все будет нормально. - person Gavin; 04.08.2013

Следующий CSS удаляет желтый цвет фона и заменяет его цветом фона по вашему выбору. Он не отключает автозаполнение и не требует взлома jQuery или Javascript.

input:-webkit-autofill {
    -webkit-box-shadow:0 0 0 50px white inset; /* Change the color to your own background color */
    -webkit-text-fill-color: #333;
}
input:-webkit-autofill:focus {
    -webkit-box-shadow: /*your box-shadow*/,0 0 0 50px white inset;
    -webkit-text-fill-color: #333;
}

Решение скопировано из: Переопределить заполнение формы браузера и выделение ввода с HTML / CSS

person humbads    schedule 15.01.2014
comment
Не играет хорошо, если на поле нанесено несколько теней. - person Streching my competence; 29.01.2019

Сработало для меня, требуется только изменение css.

input:-webkit-autofill {
    -webkit-box-shadow: 0 0 0px 1000px #ffffff inset!important;
}

вместо #ffffff можно указать любой цвет.

person Milan    schedule 21.01.2016

Немного хакерский, но отлично работает для меня

input:-webkit-autofill {
    -webkit-box-shadow: 0 0 0px 1000px white inset;
}
person maximilianhp    schedule 06.08.2015

Комбинация ответов сработала для меня

<style>
    input:-webkit-autofill,
    input:-webkit-autofill:hover,
    input:-webkit-autofill:focus,
    input:-webkit-autofill:active {
        -webkit-box-shadow: 0 0 0px 1000px #373e4a inset !important;
           -webkit-text-fill-color: white !important;
   }
</style>
person LeRoy    schedule 05.02.2016
comment
Это единственный пример, который работал у меня как с текстом, так и с фоном в Chrome версии 53.0.2785.116 m. - person pleshy; 23.09.2016

Вот версия Джейсона для MooTools. Исправляет это и в Safari.

window.addEvent('domready',function() { 
    $('username').focus();

    if ((navigator.userAgent.toLowerCase().indexOf(\"chrome\") >= 0)||(navigator.userAgent.toLowerCase().indexOf(\"safari\") >= 0))
    {

        var _interval = window.setInterval(function ()
        {
            var autofills = $$('input:-webkit-autofill');
            if (autofills.length > 0)
            {

                window.clearInterval(_interval); // stop polling
                autofills.each(function(el)
                {
                    var clone = el.clone(true,true).inject(el,'after');;
                    el.dispose();
                });
            }
        }, 20);                                               


    }
});
person Confidant    schedule 08.10.2012
comment
Не используйте этот сценарий. Если нет автозаполненных элементов, цикл будет непрерывно выполняться с интервалом 20 миллисекунд. Интервал не нужен. Установите тайм-аут после window.load около 50 миллисекунд, и этого будет достаточно, чтобы удалить стиль. - person Gavin; 04.08.2013

Это устраняет проблему как в Safari, так и в Chrome.

if(navigator.userAgent.toLowerCase().indexOf("chrome") >= 0 || navigator.userAgent.toLowerCase().indexOf("safari") >= 0){
window.setInterval(function(){
    $('input:-webkit-autofill').each(function(){
        var clone = $(this).clone(true, true);
        $(this).after(clone).remove();
    });
}, 20);
}
person Arjan    schedule 18.01.2013
comment
Это то, что у меня работает. Но ОШИБКА все еще существует, и, как видно, дата не подлежит исправлению. code.google.com/p/chromium/issues/detail? id = 46543 # c22 - person Eduardo M; 06.06.2013
comment
Вы никогда не очистите интервал. Это небрежный код, не используйте его. - person Gavin; 04.08.2013
comment
На самом деле это не работает. Я не могу ничего вводить во входные данные, так как они постоянно клонируются. почти готово... - person Dustin Silk; 30.04.2015
comment
попробуйте этот var id = window.setInterval (function () {$ ('input: -webkit-autofill'). each (function () {var clone = $ (this) .clone (true, true); $ (this) .after (clone) .remove ();});}, 20); $ ('ввод: -webkit-autofill'). focus (функция () {window.clearInterval (id);}); - person Dustin Silk; 30.04.2015

Это помогло мне, версия только CSS.

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

где белый может быть любого цвета.

person Matt Goo    schedule 22.05.2015

Я использую это,

input:-webkit-autofill { -webkit-box-shadow: 0 0 0px 1000px white inset !important; }
input:focus:-webkit-autofill { -webkit-box-shadow: 0 0 0px 1000px white inset !important; }
/* You can use color:#color to change the color */
person Bhavesh G    schedule 28.06.2015

Просто вставьте в свой тег эту небольшую строчку кода.

autocomplete="off"

Однако не помещайте это в поле имени пользователя / электронной почты / идентификатора, потому что, если вы все еще хотите использовать автозаполнение, оно отключит его для этого поля. Но я нашел способ обойти это, просто поместите код в тег ввода пароля, потому что вы никогда не заполняете пароли автоматически. Это исправление должно убрать силу цвета, возможность автозаполнения matinain в вашем поле электронной почты / имени пользователя и позволит вам избежать громоздких взломов, таких как Jquery или javascript.

person Alex Sarnowski    schedule 25.01.2012

Если вы хотите полностью избавиться от него, я скорректировал код в предыдущих ответах, чтобы он также работал при наведении, активном и фокусировке:

input:-webkit-autofill, input:-webkit-autofill:hover, input:-webkit-autofill:active, input:-webkit-autofill:focus {
    -webkit-box-shadow: 0 0 0 1000px white inset;
}
person Alex    schedule 03.02.2015
comment
добавить !important необходимо, но спасибо, это мне очень помогло. - person Polochon; 10.03.2015

Вот решение Mootools, которое делает то же самое, что и Алессандро - заменяет каждый затронутый ввод новым.

if (Browser.chrome) {
    $$('input:-webkit-autofill').each(function(item) {
        var text = item.value;
        var name = item.get('name');
        var newEl = new Element('input');
        newEl.set('name', name);
        newEl.value = text;
        newEl.replaces(item);
    });
}
person And Finally    schedule 03.06.2011

Что насчет этого решения:

if ($.browser.webkit) {
    $(function() {
        var inputs = $('input:not(.auto-complete-on)');

        inputs.attr('autocomplete', 'off');

        setTimeout(function() {
            inputs.attr('autocomplete', 'on');
        }, 100);
    });
}

Он отключает автозаполнение и автозаполнение (поэтому желтый фон исчезает), ждет 100 миллисекунд, а затем снова включает функцию автозаполнения без автозаполнения.

Если у вас есть поля ввода, которые нужно заполнить автоматически, дайте им auto-complete-on класс css.

person cryss    schedule 01.02.2013

Ни одно из решений не сработало для меня, поля ввода имени пользователя и пароля все еще были заполнены и имели желтый фон.

Поэтому я спросил себя: «Как Chrome определяет, что должно быть автоматически заполнено на данной странице?»

«Ищет ли он идентификаторы ввода, имена ввода? Идентификаторы формы? Действия формы?»

Экспериментируя с вводом имени пользователя и пароля, я обнаружил только два способа, из-за которых Chrome не сможет найти поля, которые должны быть заполнены автоматически:

1) Поместите ввод пароля перед вводом текста. 2) Дайте им то же имя и идентификатор ... или без имени и идентификатора.

После загрузки страницы с помощью javascript вы можете либо изменить порядок входных данных на странице, либо динамически дать им их имя и идентификатор ...

И Chrome не знает, что его ударило ... автозаполнение отключено.

Я знаю, что это сумасшедший хак. Но у меня это работает.

Chrome 34.0.1847.116, OSX 10.7.5

person i_a    schedule 25.04.2014

Единственный способ, который сработал для меня, был: (требуется jQuery)

$(document).ready(function(e) {
    if ($.browser.webkit) {
        $('#input_id').val(' ').val('');
    }
});
person user3638028    schedule 14.05.2014

Я исправил эту проблему для поля пароля, которое у меня было следующим образом:

Установите тип ввода текст вместо пароля

Удалите введенное текстовое значение с помощью jQuery

Преобразуйте тип ввода в пароль с помощью jQuery

<input type="text" class="remove-autofill">

$('.js-remove-autofill').val('');    
$('.js-remove-autofill').attr('type', 'password');
person Ahmad Ajmi    schedule 25.06.2014
comment
Не работает в Chrome. Как только поле становится type = password, Chrome заполняет его - person mowgli; 19.08.2014

Обновление решения Arjans. При попытке изменить значения это не позволит вам. У меня это отлично работает. Когда вы фокусируетесь на вводе, он становится желтым. это достаточно близко.

$(document).ready(function (){
    if(navigator.userAgent.toLowerCase().indexOf("chrome") >= 0 || navigator.userAgent.toLowerCase().indexOf("safari") >= 0){
        var id = window.setInterval(function(){
            $('input:-webkit-autofill').each(function(){
                var clone = $(this).clone(true, true);
                $(this).after(clone).remove();
            });
        }, 20);

        $('input:-webkit-autofill').focus(function(){window.clearInterval(id);});
    }
});

$('input:-webkit-autofill').focus(function(){window.clearInterval(id);});
person Dustin Silk    schedule 30.04.2015

Попробуйте этот код:

 	$(function(){
   		setTimeout(function(){
   			$('[name=user_password]').attr('type', 'password');
   		}, 1000);
   	});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.10.0/jquery.min.js"></script>
<input name="user_password" type="password">

person Андрій Глущенко    schedule 21.07.2015

тариф намрути правильный ответ. Но фон по-прежнему становится желтым, когда выбран вход. Добавление !important устраняет проблему. Если вы хотите также textarea и select с таким же поведением, просто добавьте textarea:-webkit-autofill, select:-webkit-autofill

Только ввод

input:-webkit-autofill {
    background-color: rgb(250, 255, 189) !important;
}

ввод, выбор, текстовое поле

input:-webkit-autofill, textarea:-webkit-autofill, select:-webkit-autofill {
    background-color: rgb(250, 255, 189) !important;
}
person Merlin    schedule 25.09.2015

Добавление autocomplete="off" никуда не годится.

Измените атрибут типа ввода на type="search".
Google не применяет автоматическое заполнение к вводам с типом поиска.

Надеюсь, это сэкономит вам время.

person Matas Vaitkevicius    schedule 28.10.2015

Если вы хотите избежать желтого мерцания, пока ваш CSS не будет применен, сделайте переход на этом плохом мальчике следующим образом:

input:-webkit-autofill {
    -webkit-box-shadow: 0 0 0 1000px white inset !important;
    transition: background-color 10s ease-in-out 0s;
}
person Sebastian    schedule 08.10.2018

Окончательное решение:

$(document).ready(function(){
    var contadorInterval = 0;
    if (navigator.userAgent.toLowerCase().indexOf("chrome") >= 0)
    {
        var _interval = window.setInterval(function ()
        {
            var autofills = $('input:-webkit-autofill');
            if (autofills.length > 0)
            {
                window.clearInterval(_interval); // stop polling
                autofills.each(function()
                {
                    var clone = $(this).clone(true, true);
                    $(this).after(clone).remove();
                    setTimeout(function(){
//                        $("#User").val('');
                        $("#Password").val('');
                    },10);
                });
            }
            contadorInterval++;
            if(contadorInterval > 50) window.clearInterval(_interval); // stop polling
        }, 20);
    }else{
        setTimeout(function(){
//            $("#User").val('');
            $("#Password").val('');
        },100);
    }
});
person Charly Novoa    schedule 11.04.2014

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

Аналогичный вопрос: Ссылка

person Aditya P Bhatt    schedule 13.05.2014
comment
хром игнорирует autocomplete = off - person Sven van den Boogaart; 16.05.2014
comment
Отключить автозаполнение в Google Chrome: ‹a href=browsers.about.com/od/googlechrome/ss/ - person Aditya P Bhatt; 17.05.2014

Просто столкнулся с тем же вопросом. Это работает для меня:

form :focus {
  outline: none;
}
person Community    schedule 27.05.2012
comment
это контур на поле, когда вы щелкаете по нему, а не цвет фона автозаполнения ввода - person Claire; 02.10.2012