Переопределить заполнение форм браузера и подсветку ввода с помощью HTML / CSS - PullRequest
122 голосов
/ 26 февраля 2010

У меня есть 2 основных формы - войти и зарегистрироваться, обе на одной странице. Теперь у меня нет проблем с автозаполнением формы входа, , но форма регистрации также автоматически заполняется, и мне не нравится. Кроме того, стили форм получают желтый фон, который я не могу переопределить, и я не хочу использовать встроенный CSS для этого. Что я могу сделать, чтобы они перестали окрашиваться в желтый цвет и (возможно) автозаполнение ? Заранее спасибо!

Ответы [ 20 ]

177 голосов
/ 13 декабря 2012

Обманите его «сильной» внутренней тенью:

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;
} 
141 голосов
/ 10 марта 2010

для автозаполнения, вы можете использовать:

<form autocomplete="off">

относительно проблемы окраски:

из вашего скриншота я вижу, что webkit генерирует следующий стиль:

input:-webkit-autofill {
    background-color: #FAFFBD !important;
}

1) поскольку # id-стили еще более важны, чем стили .class, следующие могут работать:

#inputId:-webkit-autofill {
    background-color: white !important;
}

2) если это не сработает, вы можете попытаться установить стиль с помощью javascript программно

$("input[type='text']").bind('focus', function() {
   $(this).css('background-color', 'white');
});

3) если это не сработает, вы обречены: -) учтите это: это не скроет желтый цвет, но сделает текст снова читабельным.

input:-webkit-autofill {
        color: #2a2a2a !important; 
    }

4) решение css / javascript:

CSS:

input:focus {
    background-position: 0 0;
}

и следующий javascript должен быть запущен при загрузке:

function loadPage()
{
    if (document.login)//if the form login exists, focus:
    {
        document.login.name.focus();//the username input
        document.login.pass.focus();//the password input
        document.login.login.focus();//the login button (submitbutton)
    }
}

например:

<body onload="loadPage();">

удачи: -)

5) Если ничего из вышеперечисленного не работает, попробуйте удалить элементы ввода, клонировать их и затем поместить клонированные элементы обратно на страницу (работает в Safari 6.0.3):

<script>
function loadPage(){

    var e = document.getElementById('id_email');
    var ep = e.parentNode;
    ep.removeChild(e);
    var e2 = e.cloneNode();
    ep.appendChild(e2);

    var p = document.getElementById('id_password');
    var pp = p.parentNode;
    pp.removeChild(p);
    var p2 = p.cloneNode();
    pp.appendChild(p2);
}

document.body.onload = loadPage;
</script>

6) С здесь :

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);
        });
    });
}
23 голосов
/ 17 октября 2013

Добавьте это правило CSS, и желтый цвет фона исчезнет. :)

input:-webkit-autofill {
    -webkit-box-shadow: 0 0 0px 1000px white inset;
}
13 голосов
/ 03 ноября 2016

После 2 часов поиска кажется, что Google Chrome все-таки переопределяет желтый цвет, но я нашел исправление. Это будет работать для парения, фокусировки и т. Д. Все, что вам нужно сделать, это добавить !important к нему.

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

это полностью удалит желтый цвет из полей ввода

13 голосов
/ 26 февраля 2010
<form autocomplete="off">

Почти все современные браузеры будут уважать это.

3 голосов
/ 31 июля 2014

Иногда автозаполнение в браузере все еще выполняется автоматически, когда у вас есть только код в элементе <form>.

Я также пытался поместить его в элемент <input>, и он работал лучше.

<form autocomplete="off">  AND  <input autocomplete="off">

Поддержка этого атрибута прекращается, пожалуйста, прочитайте https://bugzilla.mozilla.org/show_bug.cgi?id=956906#c1

https://bugzilla.mozilla.org/show_bug.cgi?id=956906


Другая найденная мною обходная работа - удаление заполнителей внутри полей ввода, которые предполагают, что это поле электронной почты, имени пользователя или телефона (т. Е. «Ваш электронный адрес», «Электронная почта» и т. 1015 *

enter image description here

Это позволяет браузерам не знать, что это за поле, поэтому не пытается его заполнить автоматически.

3 голосов
/ 26 февраля 2010

Вы также можете изменить атрибут name ваших элементов формы, чтобы он создавался так, чтобы браузер не отслеживал его. ОДНАКО Firefox 2.x + и Google Chrome, похоже, не имеют особых проблем с этим, если URL-адрес запроса идентичен. Попробуйте в основном добавить параметр запроса соли и имя поля соли для формы регистрации.

Однако я думаю, что autocomplete = "off" по-прежнему является лучшим решением:)

3 голосов
/ 07 марта 2010

Вы можете отключить автозаполнение с HTML5 (через autocomplete="off"), но вы НЕ МОЖЕТЕ переопределить подсветку браузера. Вы можете попробовать поиграться с ::selection в CSS (большинству браузеров для этого нужен префикс поставщика), но это, вероятно, вам тоже не поможет.

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

2 голосов
/ 18 января 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);
}
1 голос
/ 28 января 2011

Если он находится в поле ввода, вы пытаетесь "снять желтый" ...

  1. Установить цвет фона с помощью css ... скажем, #ccc (светло-серый).
  2. Добавить значение = "sometext", которое временно заполняет поле "sometext"
  3. (необязательно) Добавьте небольшой javascript, чтобы прояснить "sometext", когда вы собираетесь вставить настоящий текст.

Итак, это может выглядеть так:

<input id="login" style="background-color: #ccc;" value="username"
    onblur="if(this.value=='') this.value='username';" 
    onfocus="if(this.value=='username') this.value='';" />
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...