O elemento input[type=”file”]
Quando seus usuários precisam fazer upload de alguma coisa no seu sistema, é a ele que você recorre.
O básico
O elemento é bem simples:
<input type="file" />
Mas se você quer o mínimo de acessibilidade vai precisar adicionar mais um pouco de html:
<form method="post" formenctype="multipart/form-data">
<label for="upload"> Upload your picture: </label>
<input type="file" name="upload" id="upload" />
</form>
Como o input radio e outros tipos de inputs do HTML, o estilo desse input é definido pelo browser.
Limitações
Você pode limitar as opções do usuário setando diferentes MIME type no atributo accept, você também pode usar o “*” para permitir arquivos de um tipo em particular.
<input type="file" accept="image/*" name="upload" id="upload" />
IOS suporta o “*” mas não suporta arquivos específicos como por exemplo image/png.
Tudo que não for um arquivo do tipo imagem vai ser ignorado ou nem aparecera quando o dialog para escolher os arquivos abrir.
Você também pode aceitar múltiplos arquivos utilizando o atributo booleano multiple.
<input type="file" multiple accept="image/*" name="upload" id="upload" />
Customização
Por padrão o elemento não é naaada customizável, mas como tudo nessa vida existe um workaround:
Com javascript:
Com JS você pode fazer coisas bem legais como preview da imagem que o usuário está subindo ou até mostrar quanto falta para o upload acabar e muito mais.
Com CSS
Para estilizar com CSS é quase a mesma coisa que acontece com radio e checkbox você esconde o elemento em si e faz todo o estilo com a label.
Lembrando que tudo isso é muito legal mas não se esqueça da acessibilidade. Todos devem ter acesso as informações do seu site independente das limitações ❤