Input type file, esthétisme, drop box

L’élément de formulaire input de type fichier file n’est pas stylisable et est considéré comme laid à la fois par les utilisateurs et les développeurs. Il est néanmoins possible de le cacher et de le présenter avec un bouton et un texte et/ou une boîte de dépôt dropbox avec laquelle il est permis de glisser et déposer un ou plusieurs fichiers. Nous allons voir cela avec un input simple.

Un input type file, une dropbox, un bouton sur fond de pont vieux et de cathédrale à Béziers

L’élément input file

L’élément input est simplement :

Pour accepter plusieurs fichiers, on ajoute l’attribut multiple.

La boîte de dépôt et le bouton

On enveloppe cet élément dans une div en y mettant devant un bouton et un texte span.

Les textes Drop your zip file here or et Choose svg font zip file peuvent facilement être changés. L’élément input type file sera caché.

Le style

On peut mettre en forme de la façon suivante avec SASS :

Le bouton a l’id zipFileSelect, le texte zipFileName, la boîte de dépot zipFileDropbox et l’élément input a le nom zipFontFile.

Javascript

On définit dans le Javascript les constantes suivantes :

On écoute ensuite les événements dragenter, dragover et drop sur l’élément dropbox. Les évéments dragenter et dragover ne font rien, on empêche juste le comportement par défaut et la propagation aux parents. L’événement drop envoie sur le traitement. On écoute l’événement click sur le bouton qui simule un appui sur l’élément input file. La fonction handleFiles() s’occupe du traitement, à savoir la complétion de l’élément input.

La fonction handleFiles() remplit l’élément input et peut faire des vérifications par exemple sur le type de fichier, la taille ou autre. Dans mon cas, je teste que l’utilisateur sélectionne un fichier de type ZIP. On place cette fonction avant la fonction dragenter, Javascript n’aimant pas que l’on utilise des fonctions avant de les définir, surtout si l’on n’utilise pas l’événement DOMContentLoaded sur le document, ni le mot clé function pour définir les fonctions.

Dans le cas de plusieurs fichiers, on pourra choisir une autre présentation. Ici, seulement le premier fichier sélectionné est montré (files[0]). On en profite pour activer un bouton permettant le téléchargement. Sur mon exemple, j’ai un bouton Upload Font avec l’id uploadZipFontFiles.

Affichage du bouton et de la dropbox d'un input type file

Traitement AJAX

Le fichier sélectionné est utilisé de façon habituelle, dans un traitement AJAX avec jQuery par exemple :

On récupère alors le fichier dans la variable $_FILES['zip'] dans le traitement en PHP sur le serveur correspondant à l’adresse ajaxurl.

Et hop, une jolie manière de présenter un élément input de type file.

Soumettre un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables.