File upload buttons are notoriously difficult to style – browsers always want to use their own style for this button. However, to keep a site’s style consistent, it is necessary to style event file input types. I found a great solution using jquery and css:
jquery:
<script type="text/JavaScript">
$(window).load(function () { var intervalFunc = function () { $('#file_name').html($('#file_upload').val()); }; $('#file_click').on('click', function () { // use .live() for older versions of jQuery $('#file_upload').click(); setInterval(intervalFunc, 1); return false; }); });
</script>
html:
<!-- display file name(s) to the user -->
<p id="file_name"></p>
<!-- hidden from the user's view -->
<input style="display:none" id="file_upload" type="file" size="4" name="files[]" multiple/>
<!-- image viewed by the user -->
<input id="file_click" type="button" class="button" value="Browse for Files"/>
css:
<style>
.button { font-family: "Segoe UI", Candara, "Bitstream Vera Sans", "DejaVu Sans", "Bitstream Vera Sans", "Trebuchet MS", Verdana, "Verdana Ref", sans-serif; font-size: 14px; color: #494D54; background: #B3BECC; background: -moz-linear-gradient(top,#CED9EA 0%,#B3BECC 100%); background: -webkit-gradient(linear,left top,left bottom,color-stop(0%,#CED9EA),color-stop(100%,#B3BECC)); background: -webkit-linear-gradient(top,#CED9EA 0%,#B3BECC 100%); background: -o-linear-gradient(top,#CED9EA 0%,#B3BECC 100%); background: -ms-linear-gradient(top,#CED9EA 0%,#B3BECC 100%); background: linear-gradient(top,#CED9EA 0%,#B3BECC 100%); filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#CED9EA',endColorstr='#B3BECC',GradientType=0); padding: 4px 8px 4px 8px; border-radius: 4px; -moz-border-radius: 4px; -webkit-border-radius: 4px; border: 1px solid #808080; cursor: pointer; cursor: hand; }
</style>