Кратко
Скопировано: — псевдоэлемент, представляющий кнопку внутри поля <input type. Позволяет стилизовать её так же, как любую кнопку интерфейса: менять фон, бордеры, скругления, состояния наведения/фокуса и другие стили.
Пример
Скопировано
<label> Загрузить файл <input class="uploader" type="file"></label>
<label>
Загрузить файл
<input class="uploader" type="file">
</label>
.uploader::file-selector-button { margin-right: 1rem; 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 {
margin-right: 1rem;
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"> - Кнопка
:по умолчанию может не наследовать шрифт от элемента: file - selector - button <input>или его родительских элементов. Чтобы кнопка выглядела единообразно с остальным интерфейсом, явно задайте ей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, поддерживается