Кратко
Скопировано: — псевдоэлемент, представляющий кнопку внутри поля <input type. Позволяет стилизовать её так же, как любую кнопку интерфейса: менять фон, бордеры, скругления, состояния наведения/фокуса и т. п.
Пример
Скопировано
<label> Загрузить файл <input class="uploader" type="file" /></label>
<label>
Загрузить файл
<input class="uploader" type="file" />
</label>
.uploader::file-selector-button { padding: 0.5rem 0.75rem; border: 1px solid #2e6be6; border-radius: 0.5rem; background: #2e6be6; color: white; font: inherit; cursor: pointer;}.uploader::file-selector-button:hover { background: #1f4fb3; border-color: #1f4fb3;}.uploader::file-selector-button:focus { outline: 2px solid #94b6ff; outline-offset: 2px;}
.uploader::file-selector-button {
padding: 0.5rem 0.75rem;
border: 1px solid #2e6be6;
border-radius: 0.5rem;
background: #2e6be6;
color: white;
font: inherit;
cursor: pointer;
}
.uploader::file-selector-button:hover {
background: #1f4fb3;
border-color: #1f4fb3;
}
.uploader::file-selector-button:focus {
outline: 2px solid #94b6ff;
outline-offset: 2px;
}
Как пишется
СкопированоСелектор вида:
input[type="file"]::file-selector-button { ... }
input[type="file"]::file-selector-button { ... }
- Работает только на элементах
<input type.= "file"> - Наследует шрифт родительского входа не всегда. Чтобы текст кнопки совпадал с дизайном, задайте
font.: inherit - Поддерживаются обычные состояния:
:hover,:active,:focus,:disabledи медиа-запросы.
Как понять
СкопированоПо умолчанию браузер рисует системную кнопку «Выбрать файл». Псевдоэлемент : даёт контроль над её оформлением, не ломая семантику и доступность. Текст внутри кнопки задаётся браузером/локалью и не изменяется CSS — это особенность системного элемента.
Подсказки
Скопировано💡 Задавайте font, чтобы кнопка выглядела консистентно с остальными элементами формы.
💡 Контролируйте размеры через padding, а высоту входа — через line и font.
💡 Для лучшей доступности обеспечьте заметные стили фокуса (outline, outline).
💡 Для старых браузеров можно добавить префиксные аналоги: : (WebKit) и : (устаревший IE/Edge).
- Chrome 89, поддерживается
- Edge 89, поддерживается
- Firefox 82, поддерживается
- Safari 14.1, поддерживается