Вёрстка инпута для загрузки файла без JS

381
27 мая 2022, 06:40

Всем привет,

Подскажите, можно ли сверстать такой инпут как на скриншоте без применения JS, на чистом HTML и CSS? И если да, то какой должна быть его html-структура, чтобы я мог отдельно стилизовать кнопку "загрузить", кнопку с крестиком и строку с именем файла? Естественно, всё это должно ещё и работать (кнопка - загружать файл, крестик - удалять, название - обновляться).

Создание обычного <инпут тип="файл"> возвращает монолитную конструкцию из кнопки и имени файла, которую непонятно как стилизовать, да и кнопки удаления нет. Если же без JS никак не обойтись, то также прошу подсказать способы реализации задачи.

Answer 1

Если хотите иметь функционал кнопки и поля типа DropZone и при этом строить своё представление этого элемента формы, то делается следующим образом. Сам элементу устанавливаем видимость в 0, растягиваем элемент на всю площадь DropZone и ставим z-index выше своего представление. То есть, своё представление строите непосредственно под <input>.

Получается вроде такого:

input[type=file]{
   opacity:0;
   position: absolute;
   width: 300px;
   height: 100px;
   z-index: 10;
}

Но ваш функционал вряд ли осуществим на чистом CSS. Если вы используете на вашем сайте jQuery, вам наверняка понравится FilePond.

Если вы предпочитаете легковесные решения, то вот вам несколько ссылок на простенькие скрипты:

  • https://github.com/pb03/input-file
  • https://github.com/nifte/better-file-input
  • https://github.com/lifenautjoe/droppable
  • https://github.com/enyo/dropzone/
  • https://github.com/promosis/file-upload-with-preview
READ ALSO
Как вывести всю страницу одним print?

Как вывести всю страницу одним print?

Пробовал сделать страницу с помощью pythonНашёл как сделать это множеством принтов и захотел попробовать все их объединить в один

234
Почему вместо русского языка кракозябры?

Почему вместо русского языка кракозябры?

Только учусь делать сайт с помощью pythonИ решил сделать страницу с русским языком, но вышли кракозябры:

314