У меня было чертовски много времени, пытаясь достичь этого. Я не хотел использовать решение Flash, и ни одна из библиотек jQuery, на которые я смотрел, не была надежной во всех браузерах.
Я придумал собственное решение, которое полностью реализовано в CSS (за исключением изменения стиля onclick, чтобы кнопка выглядела «нажатой»).
Вы можете попробовать рабочий пример здесь: http://jsfiddle.net/VQJ9V/307/ (протестировано в FF 7, IE 9, Safari 5, Opera 11 и Chrome 14)
Он работает, создавая большой файл ввода (с font-size: 50px), затем оборачивая его в div, который имеет фиксированный размер и переполнение: скрытый. Ввод затем виден только через этот «оконный» div. Элементу div можно присвоить фоновое изображение или цвет, текст можно добавить, а ввод можно сделать прозрачным, чтобы раскрыть фон div:
HTML:
<div class="inputWrapper">
<input class="fileInput" type="file" name="file1"/>
</div>
CSS:
.inputWrapper {
height: 32px;
width: 64px;
overflow: hidden;
position: relative;
cursor: pointer;
/*Using a background color, but you can use a background image to represent a button*/
background-color: #DDF;
}
.fileInput {
cursor: pointer;
height: 100%;
position:absolute;
top: 0;
right: 0;
z-index: 99;
/*This makes the button huge. If you want a bigger button, increase the font size*/
font-size:50px;
/*Opacity settings for all browsers*/
opacity: 0;
-moz-opacity: 0;
filter:progid:DXImageTransform.Microsoft.Alpha(opacity=0)
}
Дайте мне знать, если с этим возникнут проблемы, и я постараюсь их исправить.