Não é novidade para ninguém que os componentes padrão dos navegadores são horríveis, e devemos agradecer muito de termos o CSS a nossa disposição, pois sem ele, teríamos praticamente sites em preto e branco, não é mesmo?
Hoje nós vamos ver como criar nosso próprio componente de upload, que na verdade, será uma imagem com um evento de click, quando acionada, simulamos o evento de click no input file, que estará escondido e prontamente abrirá a tela de seleção de arquivos.
Veja a nossa videoaula ensinando passo a passo e logo em seguida, todo o código fonte utilizado.
Clique aqui para baixar a imagem que utilizamos na aula.
index.html
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Upload</title>
    <link rel="stylesheet" href="style.css">
</head>
<body>
    <div class="max-width">
        <div class="imageContainer">
            <img src="camera.png" alt="Selecione uma imagem" id="imgPhoto">
        </div>
    </div>
    <input type="file" id="flImage" name="fImage" accept="image/*">
    <script src="script.js"></script>
</body>
</html>style.css
/*https://www.flaticon.com/free-icon/camera_685655?term=photo&page=1&position=1&related_item_id=685655*/
* {
    margin: 0 auto;
    padding: 0;
    box-sizing: border-box;
    border: none;
}
input[type='file'] {
    display: none;
}
.max-width {
    max-width: 500px;
    width: 100%;
}
#imgPhoto {
    margin-top: 10%;
    max-width: 300px;
    width:100%;
    padding:10px;
    background-color: #eee;
    border: 5px solid #ccc;
    border-radius: 50%;
    cursor: pointer;
    transition: background .3s;
}
#imgPhoto:hover{
    background-color: rgb(180, 180, 180);
    border: 5px solid #111;
}script.js
'use strict'
let photo = document.getElementById('imgPhoto');
let file = document.getElementById('flImage');
photo.addEventListener('click', () => {
    file.click();
});Por hora é isso.











