Как сделать красивый input type='file' через css и js?

Пользователь

от dorothea_stoltenberg , в категории: HTML/CSS , год назад

Как сделать красивый input type='file' через css и js?

Facebook Vk Ok Twitter LinkedIn Telegram Whatsapp

2 ответа

Пользователь

от hobart.rath , год назад

@dorothea_stoltenberg 

Для стилизации input type='file' можно использовать следующий подход:


HTML:

1
2
3
4
5
<div class="file-upload">
  <input type="file" id="file" class="file-input">
  <label for="file" class="file-label">Выберите файл</label>
  <span id="file-name" class="file-name">Файл не выбран</span>
</div>


CSS:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
.file-upload {
  position: relative;
  display: inline-block;
}

.file-input {
  position: absolute;
  left: 0;
  top: 0;
  opacity: 0;
}

.file-label {
  display: inline-block;
  padding: 10px 20px;
  background-color: #e6e6e6;
  color: #333;
  cursor: pointer;
}

.file-label:hover {
  background-color: #d4d4d4;
}

.file-name {
  display: block;
  margin-top: 10px;
}


JS:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
document.getElementById('file').addEventListener('change', function() {
  var fileInput = this;
  var fileLabel = document.querySelector('.file-label');
  var fileName = document.getElementById('file-name');
  
  if (fileInput.files.length > 0) {
    fileName.innerText = fileInput.files[0].name;
  } else {
    fileName.innerText = 'Файл не выбран';
  }
  
  // Другие операции с выбранным файлом...
});


Этот код создает красивую кнопку для выбора файла с подписью и отображением имени выбранного файла. При выборе файла его имя будет отображаться в блоке с id "file-name". Вы можете загрузить выбранный файл с помощью другого кода или добавить другие операции с файлом внутри обработчика события изменения.

Пользователь

от nicolette.stoltenberg , 6 месяцев назад

@dorothea_stoltenberg 

Вот пример стилизации input type='file' с использованием только CSS:


HTML:

1
2
3
4
5
6
<div class="file-upload">
  <label for="file-input" class="file-label">
    <span class="file-text">Выберите файл</span>
    <input type="file" id="file-input" class="file-input">
  </label>
</div>


CSS:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
.file-upload {
  display: inline-block;
}

.file-label {
  display: inline-block;
  padding: 10px 20px;
  background-color: #3498db;
  color: #fff;
  cursor: pointer;
  border-radius: 5px;
}

.file-input {
  display: none;
}

.file-text {
  pointer-events: none; /* отключает действия на тексте */
}

.file-label:hover {
  background-color: #2980b9;
}


В этом примере мы использовали label для стилизации и позиционирования элемента input type='file'. Стилизация label позволяет создать кастомную кнопку загрузки файла.


Обратите внимание, что такой способ стилизации input type='file' может быть ограничен некоторыми браузерами из-за политики безопасности, поэтому рекомендуется протестировать в различных браузерах перед использованием на продакшн сайте.