Як зупинити Chrome від пожовтіння вікон для введення мого сайту?


151

Серед інших текстових та наочних посібників під час подання форми, після валідації, я фарбую свої вхідні поля червоним кольором, щоб позначити інтерактивну область, яка потребує уваги.

У Chrome (і для користувачів Панелі інструментів Google) функція автоматичного заповнення перефарбовує мої форми введення в жовтий. Ось складна проблема: я хочу, щоб автозаповнення було дозволено на моїх формах, оскільки це прискорює вхід користувачів. Я збираюся перевірити можливість вимкнення атрибута автозаповнення, якщо / коли виникає помилка, але це складний біт кодування, щоб програматично вимкнути автоматичне заповнення для одного вхідного тексту на сторінці. Простіше кажучи, це було б головним болем.

Тож, щоб спробувати уникнути цього питання, чи є якийсь простіший спосіб зупинити Chrome від перефарбовування вхідних полів?

[редагувати] Я спробував важливу пропозицію! нижче, і це не мало ефекту. Я ще не перевірив Панель інструментів Google, щоб перевірити, чи важливий для цього атрибут!

Наскільки я можу сказати, немає іншого способу, крім використання атрибута автозаповнення (який, здається, працює).


1
це не лише проблема в Chrome. Панель інструментів Google для інших браузерів виконує те саме "пожовтіння" полів введення.
Карлтон Дженке

2
Я дав відповідь для вас, яка працює нижче.
Джон Лейдегрен

8
Я не розумію, чому всі говорять про контури: жоден, питання про фон yello, а не контур. І атрибут автозаповнення, встановлений для вимкнення, НЕ виправить проблему, оскільки Давебуг сказав, що хоче, щоб автозаповнення працювало, тільки не жовтий фон.

Відповіді:


74

Я знаю, що у Firefox ви можете використовувати атрибут autocomplete = "off", щоб відключити функцію автозаповнення. Якщо це працює в Chrome (не перевірено), ви можете встановити цей атрибут, коли з’явиться помилка.

Це можна використовувати як для одного елемента

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

... а також для цілої форми

<form autocomplete="off" ...>

"Я буду перевіряти можливість вимкнення атрибута автозаповнення, якщо / коли виникає помилка, але це складний біт кодування для програмного вимкнення автоматичного заповнення для одного здійсненого введення на сторінці."
Дейв Рутлідж

Хе ... так, дякую, хоча я думаю, мені все-таки потрібно перевірити в Chrome, правда?
Дейв Рутлідж

2
для людей, які використовують рейки простої форми<%= simple_form_for @user, html: { autocomplete: 'off' } do |f| %>
carbonr

Вибачте за те, що це мені не допомогло
М.Іслам

136

Встановіть властивість контуру CSS на жодну.

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

У випадках, коли браузер може також додати фоновий колір, це можна виправити чимось на зразок

:focus { background-color: #fff; }

9
Фон? Я не знав, що Chrome додав також колір фону? Якщо це так, це може бути виправлено чимось на кшталт:focus { background-color: #fff; }
Джон Лейдегрен

Убивання контуру за допомогою CSS може запобігти пожовтінню, але це не запобіжить фактичному автозаповненню. Якщо ви хочете це зробити, важливо використовувати атрибут автозаповнення, нестандартний чи ні.
Том Бутелл

2
@pestaa вірно, це не правильна відповідь, але це, безумовно, вирішує подібну проблему
Девід Лоусон

Будьте уважні при роботі з планшетами та іншим матеріалом, браузер Android за замовчуванням трохи складний у використанні без контуру. Хоча досить просто застосувати до немобільних браузерів :)
Tim Post

Невелике покращення: input[type=text], input[type=password], input[type=email], textarea, select { outline: none; }
Феліпе Ліма

56

це саме те, що ви шукаєте!

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

це чудовий хак. Спасибі
Джейсон

Я також додав би уваги цьому: Dinput:-webkit-autofill, input:focus:-webkit-autofill { -webkit-box-shadow: 0 0 0px 1000px #FFF inset; }
StephanieQ

привіт @JStormThaKid, я використав це ..., але не працював на правильні введення ... будь ласка, дайте відповідь на це ...
mithu

Дякуємо, що відповіли на запитання, яке він насправді задав! Я майже почав втрачати надію.
BVernon

Найкраща відповідь тут, я все-таки хотів отримати автозаповнення google, тому дякую
Spangle

14

Використовуючи трохи jQuery, ви можете видалити стиль Chrome, зберігаючи функцію автозаповнення недоторканою. Я написав короткий пост про це тут: 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);
    });
});}

Дякую за підказку! Однак після розміщення форми, натискання кнопки "назад", повернулася жовта підсвітка. Я розширив ваш фрагмент (див. Мою відповідь), щоб висвітлити це.
321X

+1 @Benjamin приємне рішення, воно спалахує трохи жовтим, але воно фіксується наприкінці;)
itsme

7

Для видалення кордону для всіх полів ви можете скористатися наступним:

*:focus { outline:none; }

Щоб видалити рамку для вибраних полів, просто застосуйте цей клас до потрібних полів введення:

.nohighlight:focus { outline:none; }

Ви, звичайно, також можете змінювати кордон, як хочете:

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

(Від Білла Беккельмана: Перезапис автоматичної межі Chrome навколо активних полів за допомогою CSS )


2

Так, це був би головний головний біль, який, на мій погляд, не варто повертати. Можливо, ви могли трохи налаштувати свою стратегію користувальницького інтерфейсу, і замість того, щоб пофарбувати поле червоним кольором, ви могли пофарбувати межі в червоний колір або поставити поруч невелику червону стрічку (як-от стрічка "Завантаження" стрічки), яка зникає, коли поле знаходиться в фокус.


1

Це шматок пирога з jQuery:

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

Або якщо ви хочете бути трохи більш вибіркові, додайте назву класу для селектора.



1

Застосувавши @Benjamin його рішення, я з'ясував, що натискання кнопки "назад" все одно надасть мені жовту родзинку.

Моє рішення якось запобігти поверненню цієї жовтої родзинки - застосувати наступний 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>

Сподіваюся, це допомагає кому-небудь !!


1

Це працює. Найкраще, що ви можете використовувати значення rgba (хак-вставка в тінь не працює з rgba). Це невеликий твіст відповіді @ Бенджаміна. Я використовую $ (document) .ready () замість $ (window) .load (). Мені здається, що це працює краще для мене - зараз ВІДБУТЬ набагато менше Я не вірю, що у використанні $ (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

для сьогоднішніх версій Це також працює, якщо розміщений на одному з двох входів для входу. Виправити також версію 40+ та пізню проблему Firefox.

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

0
input:focus { outline:none; }

Для мене це спрацювало чудово, але більш ніж ймовірно, що на вашому веб-сайті будуть рівномірними речі, які ви хочете також включити в свій CSS для текстових областей:

textarea:focus { outline:none; }

Крім того, для більшості це може здатися очевидним, але для початківців ви також можете встановити його під такий колір:

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

-1

Якщо я правильно пам’ятаю, важливе правило таблиці таблиць стилів для кольору фону входів буде замінено автоматичне заповнення панелі інструментів Google - імовірно, те саме було б і для Chrome.

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