Как убрать подсветку автозаполнения в CSS: полное кроссбраузерное решение
При разработке форм ввода данных веб-разработчики часто сталкиваются с проблемой: браузеры по-своему подсвечивают поля, заполненные через автозаполнение. Даже если вы задали background: transparent, border: none и outline: none, в Chrome, Firefox или Safari может появиться жёлтый или голубой фон. В этой статье мы разберём, почему это происходит и как это исправить.
Почему браузеры подсвечивают автозаполненные поля?
Современные браузеры (Chrome, Firefox, Safari, Edge) имеют встроенные стили для автозаполненных элементов. Они делают это для улучшения пользовательского опыта - чтобы пользователь видел, какие поля были заполнены автоматически. Однако эти стили имеют высокий приоритет и не переопределяются обычными CSS-правилами. Стандартные псевдоклассы :focus и :selection не влияют на автозаполнение.
CSS-решение для отключения подсветки
Чтобы убрать подсветку автозаполнения, нужно использовать специальные псевдоклассы для каждого браузера. Вот универсальный код:
input:-webkit-autofill,
input:-webkit-autofill:hover,
input:-webkit-autofill:focus,
input:-webkit-autofill:active,
textarea:-webkit-autofill,
textarea:-webkit-autofill:hover,
textarea:-webkit-autofill:focus,
select:-webkit-autofill,
select:-webkit-autofill:hover,
select:-webkit-autofill:focus {
-webkit-box-shadow: 0 0 0 30px white inset !important;
-webkit-text-fill-color: #333 !important;
transition: background-color 5000s ease-in-out 0s;
}Как это работает
-webkit-box-shadow- создаёт внутреннюю тень, которая перекрывает фоновый цвет браузера. Цвет тени задаёте под свой дизайн (например,white).-webkit-text-fill-color- задаёт цвет текста внутри поля, чтобы он не сбрасывался на дефолтный.transition- отключает анимацию смены фона, чтобы браузер не перерисовывал подсветку.
Кроссбраузерность и нюансы
Данный метод работает во всех современных браузерах на WebKit (Chrome, Safari, Opera, Edge на Chromium). Для Firefox используется свой псевдокласс :-moz-autofill, но на практике вышеуказанный код часто справляется и с Firefox. Если нет - добавьте:
input:-moz-autofill {
background-color: transparent !important;
}Альтернативные подходы
Отключение автозаполнения через HTML
Можно добавить атрибут autocomplete="off" к полю или форме. Однако это не всегда работает (браузеры игнорируют его для логинов и паролей) и ухудшает UX.
JavaScript-обход
Некоторые разработчики используют JS для принудительной смены стилей после загрузки страницы. Но это менее надёжно и замедляет рендеринг.
Рекомендации по тестированию
После внедрения CSS-решения обязательно проверьте формы в нескольких браузерах: Chrome, Firefox, Safari, Edge. Используйте режим инкогнито и сохраните тестовые данные для автозаполнения. Убедитесь, что фон и цвет текста соответствуют вашему дизайну.
Заключение
Убрать подсветку автозаполнения в CSS можно с помощью комбинации псевдоклассов :-webkit-autofill и свойств -webkit-box-shadow и -webkit-text-fill-color. Это кроссбраузерное решение работает в Chrome, Firefox, Safari и Edge, не требует JavaScript и сохраняет единый стиль формы.