Предупреждение Ниже приведено лишь краткое представление о том, как этого добиться путем стилизации фактического ввода и визуального скрытия метки (чтобы обеспечить ее доступность).
Однако существуют множество проблем с доступностью, которые вы все еще должны рассмотреть, показывая, например, какой файл был выбран.
Но это действительно показывает, как вы можете стилизовать ввод, чтобы сохранить все нативные функции без необходимости повторной его реализации (активная например, состояние, которое я разработал здесь). Также не забудьте пользовательский индикатор фокуса, input:focus::before
.
. Есть и другие проблемы, такие как поддержка браузера, но теоретически это должно произойти довольно изящно, я просто не тестировал его. .
Эта кодовая ручка дает хорошую отправную точку для реализации некоторых из отсутствующих функций, таких как отображение выбранного имени файла.
input{
color: transparent;
width:150px;
height:28px
}
input::-webkit-file-upload-button {
visibility: hidden;
}
input::before {
content: 'Select a PDF';
color: black;
display: inline-block;
border: 1px solid #999;
border-radius: 3px;
padding: 5px 8px;
outline: none;
white-space: nowrap;
-webkit-user-select: none;
cursor: pointer;
text-shadow: 1px 1px #fff;
font-weight: 700;
font-size: 10pt;
width:132px;
}
input:hover::before {
border-color: black;
}
input:active {
outline: 0;
}
label {
position: absolute !important;
height: 1px;
width: 1px;
overflow: hidden;
clip: rect(1px 1px 1px 1px); /* IE6, IE7 */
clip: rect(1px, 1px, 1px, 1px);
white-space: nowrap; /* added line */
}
<input id="input" class="input" name="newFile" type="file" accept=".pdf" data-required="true"/>
<label for="input">upload file</label>