Ok così semplice modo css puro di creare il tuo file di input personalizzato.
Usa le etichette, ma come sai dalle risposte precedenti, l'etichetta non invoca la funzione onclick in firefox, potrebbe essere un bug ma non importa quanto segue.
<label for="file" class="custom-file-input"><input type="file" name="file" class="custom-file-input"></input></label>
Quello che fai è dare uno stile all'etichetta per apparire come vuoi
.custom-file-input {
color: transparent;/* This is to take away the browser text for file uploading*/
/* Carry on with the style you want */
background: url(../img/doc-o.png);
background-size: 100%;
position: absolute;
width: 200px;
height: 200px;
cursor: pointer;
top: 10%;
right: 15%;
}
ora nascondi semplicemente il pulsante di input effettivo, ma non puoi impostarlo su visability: hidden
Quindi rendi invisibile impostando opacity: 0;
input.custom-file-input {
opacity: 0;
position: absolute;/*set position to be exactly over your input*/
left: 0;
top: 0;
}
ora come avrai notato ho sulla mia etichetta la stessa classe del mio campo di input, perché voglio che entrambi abbiano lo stesso stile, quindi ovunque tu faccia clic sull'etichetta, stai effettivamente facendo clic sull'invisibile Campo di inserimento.