Клавиша / esc

:autofill

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

Время чтения: меньше 5 мин

Кратко

Скопировано

:autofill — псевдокласс, который находит поля формы, куда браузер сам подставил сохранённые данные: адрес, телефон, почту. Нужен, чтобы подсвеченные браузером поля не выбивались из дизайна формы.

Пример

Скопировано
        
          
          /* Автозаполненные поля выделяем рамкой */input:autofill {  border: 2px solid #2E9AFF;  border-radius: 4px;}
          /* Автозаполненные поля выделяем рамкой */
input:autofill {
  border: 2px solid #2E9AFF;
  border-radius: 4px;
}

        
        
          
        
      

Как пишется

Скопировано
        
          
          /* Псевдокласс цепляется к селектору поля */input:autofill,textarea:autofill {  border-color: #2E9AFF;}/* И комбинируется с другими псевдоклассами */input:autofill:focus {  outline: 2px solid #2E9AFF;}
          /* Псевдокласс цепляется к селектору поля */
input:autofill,
textarea:autofill {
  border-color: #2E9AFF;
}

/* И комбинируется с другими псевдоклассами */
input:autofill:focus {
  outline: 2px solid #2E9AFF;
}

        
        
          
        
      

Как понять

Скопировано

Браузеры умеют запоминать данные, которые пользователь вводит в формы, и предлагать их в других похожих полях. Например, если вы один раз ввели свою почту на сайте, браузер может предложить её же при регистрации на другом ресурсе. Когда пользователь соглашается на такое предложение, браузер подставляет значение в поле — это и есть автозаполнение.

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

Окно браузера с формой оплаты: имя на карте, номер, срок действия и CVC заполнены автоматически, все четыре поля Chrome подсветил бледно-голубым фоном

Как ведёт себя автозаполнение

Скопировано
  • Автозаполнение происходит только по инициативе браузера. Запустить его через JavaScript нельзя.
  • Браузер может подставить значения сразу в несколько <input>, например в <input type="email"> и <input type="tel">.
  • Пока пользователь не редактирует поле, оно считается автозаполненным и соответствует :autofill.
  • Если пользователь удалит подставленное значение, а потом вернёт его обратно (даже то же самое), поле перестанет считаться автозаполненным, потому что теперь значение ввёл пользователь, а не браузер.

Что стилизуется, а что нет

Скопировано

Браузер красит автозаполненное поле сам: Chrome ставит голубоватый фон, Safari жёлтый. Эти правила лежат в служебной таблице стилей браузера и помечены флагом !important, поэтому у выбранного автозаполненного поля вашими правилами не перебиваются background-color, background-image и color. Так задумано: подсветка сообщает пользователю, что значение подставил браузер, а не сайт.

Всё остальное стилизуется как обычно: border, border-radius, box-shadow, outline, отступы. Обычно этого хватает, чтобы поле не выбивалось из формы.

Цвет текста тоже можно задать, только не через color. В браузерах на движках WebKit и Blink для этого есть -webkit-text-fill-color, и вот его браузер не блокирует.

        
          
          input:autofill {  -webkit-text-fill-color: #0B1B2E;  border: 2px solid #2E9AFF;  border-radius: 8px;}
          input:autofill {
  -webkit-text-fill-color: #0B1B2E;
  border: 2px solid #2E9AFF;
  border-radius: 8px;
}

        
        
          
        
      
Та же форма оплаты после этих правил: у автозаполненных полей появилась синяя рамка со скруглением, а фон остался прежним, браузерным

Рамку браузер отдал, а фон оставил себе, это хорошо видно в сравнении с первым скриншотом. Если голубая подсветка не вписывается, её оттенок меняет color-scheme: в тёмной схеме Chrome берёт приглушённо-синий. Отдельных правил для этого писать не нужно, достаточно объявить схему для страницы.

Если дизайн требует именно своего фона, остаются обходные приёмы. О них в разделе «На практике».

Подсказки

Скопировано

💡 Прописывайте корректные значения autocomplete у полей, чтобы браузер предлагал уместные данные и чаще попадал в :autofill.
💡 Не полагайтесь на :autofill для валидации: это лишь визуальное состояние, а не факт корректности данных.

Поддержка в браузерах:
  • Chrome 110, поддерживается
  • Edge 110, поддерживается
  • Firefox, не поддерживается
  • Safari 15, поддерживается
О Baseline

На практике

Скопировано

Алёна Батицкая советует

Скопировано

🛠 Проверить свои стили :autofill непросто, а сохранять ради этого настоящий адрес в браузере не хочется. Я пользуюсь вкладкой Autofill в DevTools Chrome. Включите там галочку «Show test address data in autofill menu», кликните правой кнопкой по полю формы и выберите тестовый адрес. Браузер заполнит форму ровно так же, как настоящими данными, и :autofill сработает по-настоящему, вместе со всей подсветкой.

🛠 Иногда дизайн упирается: фон поля должен быть свой, и приглушённый вариант из color-scheme не спасает. Тогда я закрашиваю фон внутренней тенью. box-shadow в список заблокированных свойств не попал, поэтому огромная тень внутрь просто перекрывает браузерный фон:

        
          
          input:autofill {  -webkit-text-fill-color: #FFFFFF;  box-shadow: inset 0 0 0 100px #0F1F33;}
          input:autofill {
  -webkit-text-fill-color: #FFFFFF;
  box-shadow: inset 0 0 0 100px #0F1F33;
}

        
        
          
        
      

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

🛠 Ещё в интернете часто советуют растянуть transition: background-color 9999s ease 0s. Работает это так: браузер меняет фон, но переход настолько длинный, что цвет просто не успевает проявиться. Я этот приём не люблю. Он не убирает подсветку, а откладывает её, и вдобавок занимает у поля переходы фона: плавную смену цвета на :hover или :focus вы после этого уже не добавите. Если выбирать из двух обходных путей, тень предсказуемее.