Google Chrome форму автозаповнення та його жовтий фон


245

У мене є проблема дизайну з Google Chrome та функцією автозаповнення форми. Якщо Chrome запам'ятовує вхід / пароль, він змінює колір тла на жовтий.

Ось кілька скріншотів:

alt текст alt текст

Як видалити цей фон або просто відключити цю автозаповнення?


4
Я також хотів би дізнатися, чи є відповідь на це.
Кайл

12
Для стилю цей колір може серйозно використовувати елементи дизайну, як, наприклад, окреслення вхідних тегів у Chrome, я б більше хотів змінити колір, ніж вимкнути його.
Кайл

3
Google, схоже, певною мірою визнає це питання. Дивіться code.google.com/p/chromium/isissue/detail?id=46543
MitMaro

1
Щоб відключити автозаповнення, ви можете додати autocomplete = "off" до вхідного елемента, наприклад, <input type = "text" id = "input" autocomplete = "off">
joe_young

1
Просто додаткова інформація: мене покусало, коли я маю поле з паролем. Я автоматично виділяв свої поля (жовті) і заповнювався дивним значенням. І я знайшов рішення тут: zigpress.com/2014/11/22/stop-chrome-messing-forms ... Рішення знаходиться в розділі, де написано "Вимкнути автоматичне заповнення Google Chrome" ... додайте приховані поля.
Кокордда Рака

Відповіді:


282

Змініть "білий" на будь-який колір, який ви хочете.

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

4
чудова ідея. Я б дотримувався 50 або 100, коли це достатньо (звичайні поля введення розміру), щоб уникнути потенційних результатів на слабших пристроях. (І немає потреби в px після 0)
Френк Нокк

4
Любіть цей хак! Чудове мислення ... Усі знімають автозаповнення. Мені хотілося зберегти автозаповнення, щоб просто проїхатись потворного жовтого.
Тревіс

1
Не працює, якщо за полем введення у вас фонові зображення, просто заповніть всю область білим кольором. Я спробував усі рішення на цій сторінці, включаючи основані на jquery, і вони не працювали на мене, врешті-решт я повинен був додати автоповне = "вимкнено" у поле.
Майк Блек

19
Щоб також стилізувати використання тексту тексту -webkit-text-fill-color- див. Це питання
Ервін Весселс

2
є помилка, я не можу змінити синтаксис, але це працює зараз:box-shadow: inset 0 0 0 1000px white !important;
Мухаммед Умер

49

Якщо вам потрібні прозорі поля введення, ви можете використовувати перехід та затримку переходу.

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

Найкраще рішення для мене, оскільки значення кольорів RGBA не спрацювали -webkit-box-shadow. Також усувається необхідність вказувати значення кольорів для цієї декларації: значення за замовчуванням все одно застосовуватимуться.
Себастьян

ще краще - використовувати затримку переходу замість її тривалості, щоб не мати змішування кольорів взагалі
antoine129,

добре, але мені чомусь довелося перенести це правило в кінці файлу, інакше не вийшло
Ігор Мізак

Це те, що я шукав! Дякую!
Ахмедзанов Даниліан

43

Рішення тут :

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);
        });
    });
}

Це спрацювало, тоді як верхня відповідь не була. Однак я думаю, що не намагатимусь змінити поведінку з а). це javascript, тому між ним працює друга, і він не працює (поки js не завантажується) і b). це може сплутати хромованого користувача, який звик до поведінки за замовчуванням.
TK123

3
Мій хром просто реалізовує жовтий на новий вхід :(
Дастін Шовк

Будь ласка, не варто. Це не працюватиме з будь-якими рамками JS, лише для статичних веб-сайтів.
Ахмедзанов Даниліан

26

У Firefox ви можете відключити всі автозаповнення форми, використовуючи атрибут autocomplete = "off / on". Так само окремі елементи автозаповнення можна встановити за допомогою того ж атрибута.

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

Ви можете протестувати це в Chrome, як це має працювати.


7
Обертання autocomplete="off"не доступне в ці дні.
Жоао

4
На жаль, це рішення більше не працює в Chrome.
henrywright

1
Це дуже не рекомендується, оскільки ви насправді не вирішуєте фактичну проблему тут. натомість ви створюєте нове, розчаровуючи користувачів, оскільки їм доводиться вручну вводити свої дані (імовірно) для входу (якщо вони навіть пам’ятають, якими вони були)
xorinzor

25

Якщо ви хочете зберегти автозаповнення, а також будь-які дані, вкладені обробники та функціональні можливості, додані до вхідних елементів, спробуйте цей сценарій:

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


6
Це єдине рішення, яке я знайшов працювати, БЕЗ відключення автозаповнення.
Ксероксоїд

можливо, встановлення інтервалів не потрібне, оскільки хромовані автозаповнення на window.load?
Тімо Хуовінен

2
Працює без видалення автоматичного повного, набагато кращого рішення, ніж рішення з мільйонами голосів.
Аллі

Інші рішення для мене не спрацювали, навіть найбільш схвалені, але це було. Проблема, протилежна тому, що @Timo сказав вище, полягає в тому, що Chrome не автоматично заповнюється прямо під window.load. Незважаючи на те, що це спрацювало, одна проблема з ним полягає в тому, що якщо немає елементів -webkit-autoofill, цикл постійно працює. Для цього вам навіть не потрібен інтервал. Просто встановіть тайм-аут, можливо, затримка 50 мілісекунд, і це буде добре.
Гавін

16

Наведений нижче CSS видаляє жовтий колір фону та замінює його кольором тла на ваш вибір. Він не вимикає автоматичне заповнення, і для нього не потрібні жодні jQuery або Jacks.

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


Не грає добре, якщо на полі застосовано кілька тіней.
Підсилення моєї компетенції

6

Для мене працювали, потрібна лише зміна css.

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

ви можете помістити будь-який колір замість #ffffff .


3

Трохи хакі, але прекрасно працює для мене

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

3

Комбінація відповідей працювала на мене

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

Це єдиний приклад, який працював для мене як з текстом, так і з фоном у версії Chrome 53.0.2785.116 m
pleshy

2

Ось версія 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);                                               


    }
});

1
Не використовуйте цей сценарій. Якщо немає заповнених елементів, цикл буде постійно працювати протягом 20 мілісекунд. Інтервал непотрібний. Встановіть час очікування після window.load приблизно на 50 мілісекунд, і це буде достатньо часу для видалення стилю.
Гавін

2

Це вирішує проблему як у 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);
}

Це те, що працює для мене. Але БУГ все ще є, і, як видно, дати не фіксувати. code.google.com/p/chromium/isissue/detail?id=46543#c22
Eduardo M

Ви ніколи не очищаєте свій інтервал. Це неохайний код, не використовуйте його.
Гавін

1
Насправді це не працює. Я не можу вводити що-небудь у матеріали, оскільки вони постійно клонуються. майже там ...
Дастін Шовк

спробуйте цей var id = window.setInterval (function () {$ ('input: -webkit-autofill'). every (function () {var clone = $ (this) .clone (true, true); $ (this) .after (клон) .remove ();});}, 20); $ ('input: -webkit-autofill'). focus (function () {window.clearInterval (id);});
Дастін Шовк

2

У цьому мені допомогла версія CSS.

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

де білий може бути будь-якого кольору.


2

Я використовую це,

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

1

У свій тег просто вставте цей невеликий рядок коду.

autocomplete="off"

Однак не розміщуйте це в полі ім’я користувача / електронної пошти / імені, оскільки якщо ви все ще хочете використовувати автозаповнення, це відключить його для цього поля. Але я знайшов спосіб цього, просто помістіть код у тег введення пароля, оскільки ви ніколи не заповнюєте автозаповнення паролів. Це виправлення повинно видалити кольорову силу, можливість автозаповнення matinain у полі електронної пошти / імені користувача та дозволяє уникнути громіздких хак, як-от Jquery або javascript.


1

Якщо ви хочете повністю його позбутися, я відкоригував код у попередніх відповідях, щоб він працював на наведення, активізацію та фокусування також:

input:-webkit-autofill, input:-webkit-autofill:hover, input:-webkit-autofill:active, input:-webkit-autofill:focus {
    -webkit-box-shadow: 0 0 0 1000px white inset;
}

1
додати !importantпотрібно, але спасибі, це мені дуже допомогло.
Полохон

0

Ось рішення 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);
    });
}

0

Як щодо цього рішення:

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.


0

Жодне з рішень не працювало для мене, введення імені користувача та пароля все ще заповнювались та надавали жовтий фон.

Тож я запитав себе: "Як Chrome визначає, що слід заповнити на певній сторінці?"

"Чи шукає вхідні ідентифікатори, імена вводу? Ідентифікатори форми? Дія форми?"

Через експерименти з ім'ям користувача та паролем, я знайшов лише два способи, які спричинили б Chrome не в змозі знайти поля, які слід заповнити автоматично:

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

Після завантаження сторінки за допомогою javascript ви можете або змінити порядок входів на сторінці, або динамічно дати їм своє ім'я та ідентифікатор ...

І Chrome не знає, що це вдарило ... автозаповнення залишається вимкненим.

Божевільний хак, я знаю. Але це працює для мене.

Chrome 34.0.1847.116, OSX 10.7.5


0

Єдиний спосіб, який працює для мене: (потрібен jQuery)

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

0

Я вирішив цю проблему для поля пароля, у мене є такий:

Встановіть тип введення для тексту замість пароля

Видаліть вхідне текстове значення за допомогою jQuery

Перетворити тип введення у пароль за допомогою jQuery

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

$('.js-remove-autofill').val('');    
$('.js-remove-autofill').attr('type', 'password');

Не працює в Chrome. Як тільки поле набуває типу = пароль, Chrome заповнює його
mowgli

0

Оновлення рішення 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);});

0

Спробуйте цей код:

 	$(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">


0

відповідь дарованої наміруті правильна. Але фон все одно жовтіє, коли вибрано вхід . Додавання !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;
}

0

Додавання autocomplete="off"не збирається скорочувати.

Змініть атрибут типу введення на type="search".
Google не застосовує автоматичне заповнення до даних із типом пошуку.

Сподіваюсь, це заощадить певний час.


0

Якщо ви хочете уникнути жовтого мерехтіння, поки не буде застосовано ваш css, натисніть на перехід на такого поганого хлопчика, як:

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

-1

Остаточне рішення:

$(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);
    }
});


-5

Щойно я опинився з тим же запитанням. Це працює для мене:

form :focus {
  outline: none;
}

3
ось контур на полі, коли ви клацаєте на ньому, а не кольором тла автоматичного заповненого вводу
Клер
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.