Dar estilos a un input file

Es muy sencillo dar estilos a un boton en HTML usando estilos, Bootstrap o algun otro framework de CSS, seria algo como:

<button type="button" class="btn btn-default">Soy un boton</button>

Pero las cosas cambian al tener un input del tipo file , pues este genera automaticamente un boton que no es muy bonito y tiende a ser diferente en cada plataforma o navegador.

Este problema se resuelve de muchas formas ya sea usando javascript,css o alguna libreria (http://whatknownsense.blogspot.mx/).

En mi caso yo usare css y nada mas:

  • Primero agregamos el boton con su respectivo label y ocultamos el boton.

    <label for="archivo" class="upload-button">Subir archivo</label>
    <input id="archivo" name="archivo" type="file" style="display:none" />
    
  • Despues agregamos estilos al label

    .upload-button{
        //TODO
    }
    
    
    .upload-button:hover{
    //TODO    
    }
    
  • Al final el resultado quedaria muy similar a esto:

Simple!.

Fuentes: