estilização de entrada de arquivo html

<input type="file" class="custom-style" />

Se você acha que fazer essa tag de entrada parecer bonita é simplesmente uma questão de CSS, pense novamente.

problema

O elemento de entrada do arquivo é feio e cada navegador o exibe de maneira um pouco diferente. Infelizmente, CSS só pode estilizar algumas coisas sobre este elemento, e eu geralmente quero mais.

A melhor solução para obter um estilo personalizado é criar um novo elemento (talvez um botão) que, quando clicado, aciona o evento click neste elemento de entrada.

Isso funciona em quase todos os navegadores.

IE FTW

O IE não aprecia eventos de cliques falsos em elementos de entrada de arquivo. Você obterá um erro de segurança se o usuário não clicar realmente no elemento de entrada do arquivo.

Grrrr

solução

Passe o mouse invisivelmente sobre o elemento de entrada do arquivo real sobre o botão bem estilizado.

<div class="file-input-wrapper">
<button class="btn-file-input">Upload File</button>
<input type="file" name="file" />
</div>
<style>
.file-input-wrapper {

width: 200px;

height: 40px;

overflow: hidden;

position: relative;

}

.file-input-wrapper > input[type="file"] {

font-size: 200px;

position: absolute;

top: 0;

right: 0;

opacity: 0;

}

.file-input-wrapper > .btn-file-input {

display: inline-block;

width: 200px;

height: 40px;

}

Você pode brincar com esta configuração no JSFiddle
http://jsfiddle.net/supershabam/b3WXe/

Partes principais:

  • wrapper define largura e altura
  • estouro do invólucro oculto
  • entrada de arquivo com tamanho de fonte muito alto
  • entrada de arquivo posicionada no canto superior direito do invólucro
  • a entrada do arquivo torna-se invisível ao definir a opacidade