Есть ли способ сделать <input type="file">
выглядеть одинаково во всех браузерах с помощью CSS?
<input type="file"> - пользовательские стили/css
Ответ 1
В Quirksmode.org есть интересная статья об этом: http://www.quirksmode.org/dom/inputfile.html
Ответ 2
попробуйте это -
- Возьмите нормальный элемент и поместите его в элемент с позиция: относительная.
- К этому же родительскому элементу добавьте нормальный и изображение, которое имеют правильные стили. Должность эти элементы абсолютно, так что они занимают то же место, что и .
- Установите z-индекс в 2, чтобы он лежал на верхней части стилизованного ввода/изображения.
- Наконец, установите непрозрачность до 0. Теперь становится эффективно невидимый, и стили ввод/изображение светит, но вы все еще можно нажать "Обзор", кнопка. Если кнопка расположена поверх изображения пользователь появляется щелчок по изображению и получает стандартный выбор файла окно. (Обратите внимание, что вы не можете использовать видимость: скрытая, потому что по-настоящему невидимый элемент неприступен, тоже, и нам нужно, чтобы они оставались кликабельными) До сих пор эффект может быть достигается благодаря чистому CSS. Однако, одной функции по-прежнему не хватает.
- Когда пользователь выбрал файл, видимое, поддельное поле ввода должно показать правильный путь к этому файлу, как нормальный бы. Это просто вопрос копирование нового значения на поддельный вход поле, но для этого нам нужен JavaScript это.
Подробнее - http://www.quirksmode.org/dom/inputfile.html
Ответ 3
Вы можете попробовать использовать swfupload, проект с открытым исходным кодом, в который встроен крошечный Flash файл на странице, а не входной файл... Вы можете использовать CSS для стилизации кнопки, которая запускает загрузку Flash, но вы хотите.
Даунсайд: с ним может быть сложно работать, и, конечно же, у ваших пользователей должна быть вспышка.
Потенциал: несколько файлов можно выбрать сразу в диалоговом окне загрузки!
Ответ 4
вы можете просто создать собственную кнопку ввода файла.
просто установите атрибут CSS вашего элемента ввода style="display:none"
и обработайте событие click в javascript. дальнейшее чтение:
Использование скрытых элементов ввода файла с помощью метода click()
EDIT: выясняется, что это больше не работает по соображениям безопасности. немного взломать - просто установить стиль css на visibility:hidden
.
Вот JSFiddle, где я помещаю свое поле <input>
где-то в конце моей страницы и запускаю openFileDialog с помощью элемента <a>
.
//html
<input id="openFileDialog" type="file" id="files" name="files[]" accept=".json, .txt" />
//js
$("#openFile").on("click", function () {
//throws an error if browser doesn't support file upload
checkFileApiCompatibility();
//opens File Dialog
$("#openFileDialog").click();
$("#openFileDialog").on('change', function(){
openFile(this);
});
});