Sí, ¡encontré la mejor solución! Esto no es un truco, solo necesitamos 2 botones: original y 'falso'.
<input type="button" value="Choose Files">
<input type="file">
falso se muestra al usuario, y tiene
z-index:1
original se coloca encima de ella, con
z-index:2, opacity: 0; position: relative;
y tiene devoluciones de llamada:
:onmousedown=>"buttonPush('depressed')", :onmouseup=>"buttonPush('normal')"
function buttonPush(buttonStatus) {
if (buttonStatus == "depressed")
document.getElementById("fake_btn").style.borderStyle = "inset";
else
document.getElementById("fake_btn").style.borderStyle = "outset";
}
Gracias a este link http://www.dreamincode.net/forums/topic/15621-styling-a-file-browse-button/
Saludos @Piskvor, @racar
posible duplicado de [botón de carga de archivos Etiquetado] (http://stackoverflow.com/questions/686905/labeling-file-upload-button) – Piskvor