Logo
  • Créer un formulaire : la balise form
  • Les champs de saisie : la balise input
  • Les libellés : la balise label
  • Cases à cocher et boutons radio
  • Les menus déroulants : select et option
  • Le bouton d’envoi
  • Validation HTML5
  • Transmettre les données : method et action
  • Bonnes pratiques

Html5, les bases

2 jours • Créer et modifier des pages Web en HTML

Mon plan d'action

Jour 1 : Construire sa page en Html

Introduction

  • hello html5

Mise en route

  • introduction html
  • creation page html

Les balises HTML

  • insertion image
  • definition lien
  • creation tableau
  • creation formulaire
  • insertion audio video

Jour 2 : Gérer la forme avec les feuilles de styles CSS

Mise en route

  • css integration
  • css selecteur

Les propriétés CSS

  • css mise en couleur
  • css gestion texte
  • css marges espacements

Aller plus loin

  • publication site
← Retour à la formation

Bonjour
& bienvenue !

Veuillez entrer le mot de passe pour accéder au contenu de la formation.

(Mon email si vous avez une question)

La création de formulaires

Inviter les visiteurs à saisir du texte, sélectionner des options et valider avec un bouton

Un formulaire HTML permet de recueillir des informations auprès du visiteur : texte, choix, fichiers… Tout formulaire est contenu dans une balise form. Pour l’instant, concentrons-nous sur la structure visible — nous verrons la transmission des données en fin de chapitre.

Créer un formulaire : la balise form

Exemple de formulaire d'archive

La balise form est un conteneur : elle ne produit rien de visible à elle seule. Ce sont les éléments placés à l’intérieur (champs, boutons, libellés) qui composent le formulaire.

<!-- Un formulaire simple -->
<form>
  <p>Mon premier formulaire ! Les champs viendront ici.</p>
</form>

Les champs de saisie : la balise input

Pour vous simplifier la vie, donnez le même nom à votre id et à votre attribut name.

La balise input est l’élément central des formulaires. Elle change d’apparence et de comportement selon la valeur de son attribut type. Trois attributs sont essentiels :

  • type : définit la nature du champ (texte, mot de passe, date, couleur…)
  • name : identifie le champ lors de l’envoi des données au serveur — sans lui, la donnée est perdue
  • id : identifiant unique de l’élément, indispensable pour le lier à son libellé (label)
<form>
  <input type="text" name="pseudo" id="pseudo" placeholder="Votre pseudo">
  <input type="email" name="email" id="email" placeholder="votre@email.fr">
  <input type="password" name="mdp" id="mdp" placeholder="Votre mot de passe">
  <input type="tel" name="telephone" id="telephone" placeholder="06 12 34 56 78">
  <input type="date" name="naissance" id="naissance">
  <input type="number" name="quantite" id="quantite" placeholder="1">
  <input type="color" name="couleur" id="couleur">
  <input type="file" name="fichier" id="fichier">
</form>

Le champ textarea : pour les textes longs

Contrairement à input qui est une balise simple (auto-fermante), textarea est une balise double

textarea est une balise spécifique pour les textes longs. Contrairement à input, elle n’utilise pas l’attribut type, sa nature étant déjà définie par la balise elle-même. Elle permet de saisir un texte sur plusieurs lignes.

<!-- textarea est une balise double, contrairement à input -->
<textarea name="commentaire" id="commentaire" placeholder="Rédigez votre message ici..."></textarea>

Récapitulatif des types d’input les plus courants

TypeRenduUsage
textChamp texte libreNom, pseudo, ville...
emailChamp avec validation emailAdresse mail
passwordCaractères masquésMot de passe
telClavier numérique sur mobileTéléphone
numberChamp numérique avec flèchesQuantité, âge...
dateSélecteur de date natifDate de naissance...
colorSélecteur de couleurChoix de couleur
fileBouton parcourirUpload de fichier
checkboxCase à cocherChoix multiples
radioBouton radioChoix unique
submitBouton d'envoiSoumettre le formulaire

Les libellés : la balise label

Quand un label est correctement associé à son champ, un clic sur le texte du label donne le focus au champ.

Un libellé est un court texte qui indique au visiteur ce que doit contenir le champ. La balise label est liée à son champ grâce à l’attribut for, qui doit correspondre exactement à l’id du champ associé.

<form>
  <label for="prenom">Quel est votre prénom ?</label>
  <input type="text" name="prenom" id="prenom" placeholder="Votre prénom">

  <label for="email">Votre adresse mail</label>
  <input type="email" name="email" id="email" placeholder="votre@email.fr">
</form>

Placeholder et label : deux rôles différents

Le placeholder est un texte d’exemple grisé qui disparaît dès que l’utilisateur commence à saisir. Le label est un intitulé permanent et toujours visible. Le placeholder ne remplace jamais le label.

Un visiteur utilisant un lecteur d’écran, ou ayant déjà commencé à remplir le champ, ne voit plus le placeholder. Le label, lui, reste toujours accessible. C’est pourquoi chaque champ de formulaire doit avoir un label. Le placeholder est un complément, pas un substitut.

<!-- ❌ Mauvaise pratique : pas de label, seulement un placeholder -->
<input type="text" name="ville" placeholder="Votre ville">

<!-- ✅ Bonne pratique : un label permanent + un placeholder en complément -->
<label for="ville">Votre ville</label>
<input type="text" name="ville" id="ville" placeholder="Ex : Lyon, Paris...">

Cases à cocher et boutons radio

Cases à cocher : checkbox

Les cases à cocher permettent de sélectionner zéro, une ou plusieurs options. Chaque case a un name et une value distincte.

<form>
  <fieldset>
      <legend>Cochez les animaux que vous aimez</legend>

      <input type="checkbox" name="chat" id="chat" value="chat">
      <label for="chat">Chat</label>

      <input type="checkbox" name="chien" id="chien" value="chien">
      <label for="chien">Chien</label>

      <input type="checkbox" name="hirondelle" id="hirondelle" value="hirondelle">
      <label for="hirondelle">Hirondelle</label>

      <input type="checkbox" name="castor" id="castor" value="castor">
      <label for="castor">Castor</label>
  </fieldset>
</form>

Boutons radio : radio

Fieldset et legend améliorent à la fois la lisibilité et l’accessibilité de votre formulaire.

Les boutons radio obligent à choisir une seule option dans un groupe. Pour qu’ils fonctionnent ensemble, tous les boutons d’un même groupe doivent partager le même attribut name.

  • La balise fieldset regroupe visuellement les champs liés. Le navigateur affiche un cadre par défaut.
  • La balise legend sert quant à elle de titre au groupe.
<form>
  <fieldset>
      <legend>Quel est votre animal préféré ?</legend>

      <input type="radio" name="animal" id="animal-chat" value="chat">
      <label for="animal-chat">Chat</label>

      <input type="radio" name="animal" id="animal-chien" value="chien">
      <label for="animal-chien">Chien</label>

      <input type="radio" name="animal" id="animal-hirondelle" value="hirondelle">
      <label for="animal-hirondelle">Hirondelle</label>

      <input type="radio" name="animal" id="animal-castor" value="castor">
      <label for="animal-castor">Castor</label>
  </fieldset>
</form>

Les menus déroulants : select et option

La première option avec une valeur vide sert de texte d’invitation (“Choisissez un pays”). Sans elle, le premier choix réel est présélectionné par défaut, ce qui peut fausser les réponses.

La balise select crée un menu déroulant. Chaque choix est une balise option avec un attribut value.

<form>
  <label for="pays">Dans quel pays habitez-vous ?</label>
  <select name="pays" id="pays">
      <option value="">-- Choisissez un pays --</option>
      <option value="france">France</option>
      <option value="espagne">Espagne</option>
      <option value="italie">Italie</option>
      <option value="royaume-uni">Royaume-Uni</option>
      <option value="canada">Canada</option>
  </select>
</form>

Organiser les options en groupes avec optgroup

Pour un menu déroulant contenant beaucoup de choix, la balise optgroup permet de créer des catégories visuelles.

<select name="pays" id="pays">
  <option value="">-- Choisissez un pays --</option>
  <optgroup label="Europe">
      <option value="france">France</option>
      <option value="espagne">Espagne</option>
      <option value="italie">Italie</option>
  </optgroup>
  <optgroup label="Amérique">
      <option value="canada">Canada</option>
      <option value="etats-unis">États-Unis</option>
  </optgroup>
  <optgroup label="Asie">
      <option value="chine">Chine</option>
      <option value="japon">Japon</option>
  </optgroup>
</select>

Le bouton d’envoi

La balise button est préférable car elle peut contenir du texte enrichi, une icône, ou tout autre contenu HTML.

Un formulaire sans bouton est un formulaire inutilisable ! Deux syntaxes sont possibles pour créer un bouton d’envoi :

  • une balise simple input avec type="submit"
  • une balise double button avec type="submit"
La balise input type="submit" est limitée à un simple texte via l’attribut value.
<!-- Syntaxe 1 : input type submit -->
<input type="submit" value="Envoyer">

<!-- Syntaxe 2 : balise button (recommandée) -->
<button type="submit">Envoyer ma demande</button>

Vous pouvez également ajouter un bouton type="reset" qui vide tous les champs du formulaire.

<button type="reset">Effacer le formulaire</button>

Validation HTML5

Le HTML5 permet de vérifier les données avant l’envoi, directement dans le navigateur, sans JavaScript. Trois attributs couvrent l’essentiel :

Essayez de cliquer sur “Envoyer” sans remplir un champ required : le navigateur affiche automatiquement un message d’erreur.
  • required : le champ doit être rempli pour que le formulaire puisse être envoyé
  • minlength / maxlength : nombre minimum et maximum de caractères autorisés
  • Le type lui-même valide le format : type="email" vérifie la présence d’un @, type="url" vérifie le format d’adresse…
<form>
  <label for="nom">Votre nom (obligatoire)</label>
  <input type="text" name="nom" id="nom" required minlength="2" maxlength="50">

  <label for="email">Votre email (obligatoire)</label>
  <input type="email" name="email" id="email" required placeholder="votre@email.fr">

  <label for="bio">Présentez-vous (max 200 caractères)</label>
  <textarea name="bio" id="bio" maxlength="200" placeholder="Quelques mots sur vous..."></textarea>

  <button type="submit">Envoyer</button>
</form>

Transmettre les données : method et action

Cette section est une ouverture : le traitement des données côté serveur nécessite un autre langage (PHP, Node.js, Python…). En HTML, on se contente de préparer l’envoi.

Quand le visiteur clique sur le bouton d’envoi, le navigateur transmet les données du formulaire. Deux attributs de la balise form contrôlent cette transmission :

  • action : l’adresse (URL ou fichier) vers laquelle les données sont envoyées
  • method : la méthode de transmission — post ou get
<!-- Les données seront envoyées au fichier traitement.php via la méthode POST -->
<form method="post" action="traitement.php">
  <label for="prenom">Votre prénom</label>
  <input type="text" name="prenom" id="prenom" required>

  <label for="message">Votre message</label>
  <textarea name="message" id="message" required></textarea>

  <button type="submit">Envoyer</button>
</form>

POST vs GET : quelle différence ?

En résumé : utilisez method="post" par défaut. Réservez method="get" aux formulaires de recherche où l’URL partageable est un avantage.
  • POST : les données sont transmises de manière invisible dans le corps de la requête. C’est la méthode à privilégier pour la plupart des formulaires (inscription, contact, commande…).
  • GET : les données sont ajoutées dans l’URL (?nom=Dupont&prenom=Marie). Cette méthode est limitée en taille (environ 2000 caractères) et les données sont visibles dans la barre d’adresse. Elle est adaptée aux formulaires de recherche ou de filtrage.

Bonnes pratiques

  • Toujours associer un label à chaque champ — c’est la base de l’accessibilité. Un formulaire sans labels est inutilisable pour les personnes utilisant un lecteur d’écran.
  • Regrouper les champs liés avec fieldset et legend — particulièrement pour les checkbox et radio.
  • Ne pas confondre placeholder et label — le placeholder est un complément visuel, pas un substitut au label.
  • Utiliser les types HTML5 (email, tel, date, number…) — ils activent le bon clavier sur mobile et offrent une validation native gratuite.
  • Rendre obligatoires les champs essentiels avec required — c’est un premier filet de sécurité.
  • Penser au name sur chaque champ — sans lui, les données ne seront pas transmises au serveur.
exercice

Mise en pratique

Objectifs : Créer un formulaire de contact complet, structuré et accessible, contenant au moins un champ texte, un champ email, un champ mot de passe, un textarea, un groupe de boutons radio, deux cases à cocher et un menu déroulant. Chaque champ doit avoir son label correctement associé.

Dossier : JOUR 1 - HTML > 06-Formulaires

  • ex-formulaire01-champs.html
  • ex-formulaire02-complet.html

Durée : 45 min

Ressources & références

  • Developper Mozilla | L'élément formArticle
  • Developper Mozilla | L'élément input et ses typesArticle
  • Developper Mozilla | Validation côté clientArticle
  • AcceDe Web | Formulaires accessiblesArticle
  • WebAIM | Creating Accessible FormsArticle
  • Can I Use | Input typesOutil
← Précédent La création de tableaux Suivant → Insérer de l'audio et de la vidéo
Retour à l'accueil de la formation Html5, les bases