Стилизация input file. CSS стилизация поля для загрузки файла

Здравствуйте уважаемые читатели блога webcodius.ru! Одной из самых сложных задач для верстальщика является стилизация элементов формы так, как видит их дизайнер. Тем более по умолчанию такие поля как select, checkbox или file совершенно отличаются внешне в разных браузерах. В этой статье рассмотрим способы стилизации поля для загрузки файла, чтобы оно одинаково выглядело в большинстве браузеров.

На мой взгляд, наиболее оптимальным решением будет обернуть поле input с типом file в тег label. Затем скрываем поле input file, а при клике по элементу label будет вызываться окно выбора файла.

Html — код вставки поля для загрузки файла в этом случае будет таким:

<div id="file-upload">
<label>
<input type="file" name="file" id="uploade-file">
<span>Выберите файл</span>
</label>
</div>

Далее задаем CSS стили для наших элементов:

.file-upload input[type="file"]{
display: none;/* скрываем input file */
}
/* задаем стили кнопки выбора файла*/
.file-upload {
position: relative;
overflow: hidden;
width: 250px;
height: 40px;
background: #4169E1;
border-radius: 10px;
color: #fff;
text-align: center;
}
.file-upload:hover {
background: #1E90FF;
}
/* Растягиваем label на всю область блока .file-upload */
.file-upload label {
display: block;
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
cursor: pointer;
}
/* стиль текста на кнопке*/
.file-upload span {
line-height: 40px;
font-weight:bold;
}

Большинство CSS правил для класса .file-upload можно менять под Ваши нужды (такие как background, border-radius, color, width и height), так как они в основном отвечают за внешний вид кнопки выбора файла. 

В результате в окне браузера мы видим стилизованную кнопку выбора файла, по клику на которой появляется окно выбора файла:

Осталась дна проблема. При выборе файла, визуально это никак не отобразиться, а хотелось бы видеть имя загружаемого файла. Это может понадобиться, что бы пользователь мог проверить, тот ли файл он загружает. В стандартном поле input file имя загружаемого файла отображается рядом с кнопкой выбора файла, а в нашем стилизованном этого нет. Для исправления этой ситуации потребуется использовать javascript

Для начала добавим в html-код дополнительный элемент элемент div для вывода имени загружаемого файла и добавим обработчик на событие onchange:

<div class="file-upload">
<label>
<input type="file" name="file" onchange="getFileName ();" id="uploaded-file">
<span>Выберите файл</span>
</label>
</div>
<div id="file-name"></div>

 Далее добавляем код javascript, который вставляет имя файла в элемент <div id="file-name">:

function getFileName () {
var file = document.getElementById ('uploaded-file').value;
file = file.replace (/\\/g, «/»).split ('/').pop ();
document.getElementById ('file-name').innerHTML = 'Имя файла: ' + file;
}

В результате получим такой вариант поля input file:

 

При выборе файла под кнопкой появляется текст с названием файла. Данный способ стилизации input file точно работает в браузерах IE9+, Chrome, Firefox, Mozilla и Opera. Кроме того многие браузеры позволяют получать размер и разрешение выбранного файла. Также можно сделать предпросмотр выбранного файла в случае если загружается картинка. Например, такой вариант:
 

 
 
 

Код к последнему примеру можно скачать по ссылке.

На этом все, до новых встреч!

Share
Tags: рецепты css
alex

View Comments

  • Здравствуйте! 
    Как реализовать второй вариант кнопки?? С размером файла и предпросмотром изображения?? Как у вас после текста:
    "Также можно сделать предпросмотр выбранного файла в случае если загружается картинка. Например, такой вариант:"

  • Ошибка. Написано, что
    .file-upload input[type="file"]{
    при том что html

    Насколько мне известно, то нужно сделать так
    #file-upload input[type="file"]{

  • Добрый день. а как сделать по вашему примеру так чтобы несколько картинок можно было загружать сразу и превью к ним показывались.? сейчас у вас только одну можно в примере.

  • Нашёл ошибку
    Вы вместо id класс получаете
    .file-upload input[type="file"]{
    display: none;
    }
    #file-upload input[type="file"]{
    display: none;
    }

Recent Posts

  • Заработок в интернете

Ферма stealth аккаунтов. Как быстро начать и главное зачем?

В данном топике описан процесс создания и управления большим количеством аккаунтов (или stealth ферма), предназначенных для работы с репутацией и…

2 года ago
  • Заработок в интернете

Рейтинг онлайн казино на деньги: какие параметры подлежат оценке

Азартная индустрии при появлении интернета стала развиваться семимильными шагами. Игорные площадки быстро стали популярны. (далее…)

2 года ago
  • Заработок в интернете

Gologin — антидетект приложение для масштабирования ферм stealth аккаунтов

Ключевая задача антидетект браузера - обеспечить пользователя функционалом, позволяющим выглядеть в глазах поисковых и антифрод систем реальным пользователем, а не…

2 года ago
  • Заработок в интернете

Бездепозитные бонусы казино: классификация и способы получения

Бонусы без депозита предоставляют некоторые казино новичкам и зарегистрированным пользователям. Многие считают, что, воспользовавшись таким предложением, получат подарочные деньги от…

2 года ago
  • Заработок в интернете

Бездепозитные бонусы от казино — лучший подарок для любителей азартных игр

Игроки ищут любые возможности получить деньги от онлайн казино. Ведь победить в слотах непросто. Нередкие проигрыши могут подкосить бюджет любого…

2 года ago
  • Заработок в интернете

Покер на Андроид: как выбрать и скачать софт для игры на реальные деньги и бесплатно

Онлайн покер является удобным вариантом игры. Однако многие предпочитают устанавливать программы на свои устройства. (далее…)

2 года ago