Как сделать так, чтобы Chrome не пожелтел в полях ввода на моем сайте?

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

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

Итак, чтобы попытаться избежать этой проблемы, есть ли более простой способ остановить Chrome от перекраски полей ввода?

[править] Я попробовал! important, предложенное ниже, но оно не дало результата. Я еще не проверял панель инструментов Google, чтобы узнать, подойдет ли для этого атрибут! Important.

Насколько я могу судить, нет никаких других средств, кроме использования атрибута автозаполнения (который, похоже, работает).

это проблема не только в Chrome. Панель инструментов Google для других браузеров делает то же «пожелтение» полей ввода.

Carlton Jenke 07.10.2008 00:06

Я дал вам ответ, который работает ниже.

John Leidegren 02.03.2009 01:04

Я не понимаю, почему все говорят о схеме: нет, вопрос в желтом фоне, а НЕ в схеме. А атрибут autocomplete, установленный на off, НЕ решит проблему, поскольку davebug сказал, что он хочет, чтобы автозаполнение работало, а не желтый фон.

user892826 13.08.2011 11:01
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Введение в CSS
Введение в CSS
CSS является неотъемлемой частью трех основных составляющих front-end веб-разработки.
Как выровнять Div по центру?
Как выровнять Div по центру?
Чтобы выровнять элемент <div>по горизонтали и вертикали с помощью CSS, можно использовать комбинацию свойств и значений CSS. Вот несколько методов,...
Навигация по приложениям React: Исчерпывающее руководство по React Router
Навигация по приложениям React: Исчерпывающее руководство по React Router
React Router стала незаменимой библиотекой для создания одностраничных приложений с навигацией в React. В этой статье блога мы подробно рассмотрим...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
CSS: FlexBox
CSS: FlexBox
Ранее разработчики использовали макеты с помощью Position и Float. После появления flexbox сценарий полностью изменился.
151
3
95 119
13
Перейти к ответу Данный вопрос помечен как решенный

Ответы 13

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

Да, это будет серьезная головная боль, которая, на мой взгляд, не стоит возврата. Возможно, вы могли бы немного изменить свою стратегию пользовательского интерфейса и вместо того, чтобы раскрасить поле красным, вы могли бы покрасить границы в красный цвет или наклеить небольшую красную ленту рядом с ним (например, лента gmails «Загрузка»), которая исчезает, когда коробка находится в фокус.

Ответ принят как подходящий

Я знаю, что в Firefox вы можете использовать атрибут autocomplete = "off", чтобы отключить функцию автозаполнения. Если это работает в Chrome (не проверял), вы можете установить этот атрибут при обнаружении ошибки.

Это можно использовать как для одного элемента

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

... а также для всей формы

<form autocomplete = "off" ...>

«Я собираюсь проверить возможность выключить атрибут автозаполнения, если / когда возникла ошибка, но программно отключить автозаполнение для единственного введенного ввода на странице - сложная задача в кодировании».

Dave Rutledge 07.10.2008 01:54

Хех ... да, спасибо, хотя я полагаю, мне все еще нужно проверить в Chrome, верно?

Dave Rutledge 07.10.2008 18:23

для людей, пользующихся рельсами, простая форма <%= simple_form_for @user, html: { autocomplete: 'off' } do |f| %>

carbonr 09.12.2013 18:04

извините, что мне это не помогло

M.Islam 14.02.2019 08:06

Установите для свойства схемы CSS значение none.

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

В случаях, когда браузер также может добавить цвет фона, это можно исправить чем-то вроде

:focus { background-color: #fff; }

Фон? Я не знал, что Chrome также добавил цвет фона? Если да, то это можно исправить с помощью :focus { background-color: #fff; }.

John Leidegren 30.05.2010 13:43

@pestaa правильно, это неправильный ответ, но он, безусловно, решает аналогичную проблему

David Lawson 03.01.2011 06:59

Будьте осторожны при работе с планшетами и прочим, в браузере Android по умолчанию немного сложно использовать без в схеме. Достаточно легко применить к немобильным браузерам :)

Tim Post 04.02.2012 21:12

Небольшое улучшение: input[type=text], input[type=password], input[type=email], textarea, select { outline: none; }

Felipe Lima 08.04.2012 06:14

Обратите внимание, что вы также можете изменить цвет, если хотите, установив свойство outline-color в своем CSS для автозаполнения, Chrome просто имеет значение по умолчанию.

Cory Gross 26.06.2012 04:43

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

Tom Boutell 12.07.2010 20:59

У меня это сработало:: focus,: active {outline: none! Important; }

user967451 27.03.2013 09:37

Пожалуйста, ПРЕКРАТИТЕ голосование за этот ответ, поскольку он полностью НЕ отвечает на вопрос! Вопрос касался автозаполнения, а не фокусировки!

griffin 21.06.2013 14:30

@griffin Смешно, да? Как небольшое недоразумение может перевесить принятый ответ, почти 3 к 1. Это может не решить проблему автозаполнения, но оно действительно решает проблему цвета, которая в вопросе, неоднократно. Не стоит расстраиваться, люди, очевидно, сочли этот вопрос полезным, этот вопрос просто вводит в заблуждение.

John Leidegren 12.07.2013 12:23

«перекрашивать поля ввода» в случае «автозаполнения», но вы говорите о цвете фона в случае фокуса, который совершенно другой. Извините, но вы не отвечаете на вопрос, и он НЕ решает проблему примененного цвета фона в случае автозаполнения, поскольку автозаполненные поля не обязательно фокусируются одновременно! И если людей приведут сюда, когда они попытаются что-то изменить в автозаполнении, они, очевидно, также столкнутся с вашим неправильным ответом, который противоречит цели stackoverflow, которая заключается в помощи людям в решении имеющихся у них проблем.

griffin 12.07.2013 14:23

Я думаю, что сообщество ясно высказалось по этому поводу. Многие люди вводят в заблуждение (если проанализировать вопрос и проявить к нему разборчивость), но ответ по-прежнему устраивает большинство, потому что он (каким-то странным образом) уловил их намерения. Вот для чего нужны голоса. Если это почему-то не соответствует вашим ожиданиям, это нормально, но я верю, что вы принадлежите к меньшинству.

John Leidegren 12.07.2013 15:36

Используя немного 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 11.04.2013 23:39

+1 @Benjamin хорошее решение, немного мигает желтым, но в конце исправляет;)

itsme 13.08.2013 01:06

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

*:focus { outline:none; }

Чтобы удалить границу для полей выбора, просто примените этот класс к нужным полям ввода:

.nohighlight:focus { outline:none; }

Конечно, вы также можете изменить границу по своему желанию:

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

(От Билла Бекельмана: Отменить автоматическую границу Chrome вокруг активных полей с помощью CSS)

На мой взгляд, более простой способ:

  1. Получить http://www.quirksmode.org/js/detect.html
  2. Используйте этот код:

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

input:focus { outline:none; }

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

textarea:focus { outline:none; }

Также большинству это может показаться очевидным, но для новичков вы также можете установить цвет как таковой:

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

С jQuery это проще простого:

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

Или, если вы хотите быть более избирательным, добавьте имя класса для селектора.

После применения @Benjamin его решения я обнаружил, что нажатие кнопки возврата по-прежнему дает мне желтый свет.

Мое решение как-то, чтобы предотвратить появление этого желтого выделения, заключается в применении следующего 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>

Надеюсь, это поможет кому-нибудь !!

Это работает. Лучше всего то, что вы можете использовать значения rgba (взлом вставки box-shadow не работает с rgba). Это небольшая настройка ответа @Benjamin. Я использую $ (document) .ready () вместо $ (window) .load (). У меня вроде работает лучше - теперь FOUC намного меньше. Я не верю, что у использования $ (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);
        });
    });
};

это именно то, что вы ищете!

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

это отличный хак. Спасибо

Jason 18.12.2015 01:09

К этому я бы тоже добавил акцента: D input:-webkit-autofill, input:focus:-webkit-autofill { -webkit-box-shadow: 0 0 0px 1000px #FFF inset; }

StephanieQ 16.03.2016 07:40

привет @JStormThaKid, я использовал это ..., но не сработал для правильного ввода ... пожалуйста, ответьте на это ...

mithu 28.03.2016 15:29

Спасибо за ответ на вопрос, который он задал! Я почти начал терять надежду.

BVernon 12.07.2016 01:21

Лучший ответ здесь, я все еще хотел автозаполнение Google, поэтому спасибо

Spangle 14.02.2019 02:49

для сегодняшних версий это тоже работает, если поместить его в один из двух входов для входа в систему. Также исправьте проблему с версией 40+ и поздней версии Firefox.

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

Другие вопросы по теме