Guide HTML5 : tous les attributs formulaires expliqués

🏷️ Intégration HTML & CSS 📅 23/03/2026 16:00:00 👤 Mezgani said
Html5 Formulaires Attributs Inputs
Guide HTML5 : tous les attributs formulaires expliqués

Apprenez tous les attributs et éléments des formulaires HTML5 avec des exemples pour chaque cas.

Introduction

Un formulaire HTML est un ensemble de champs qui permettent aux utilisateurs d'entrer des données et de les envoyer à un serveur. C'est comment vous capturez les adresses email, les mots de passe, les commentaires, et bien plus.

Les formulaires sont au cœur de chaque application web :

  • ✅ Connexion et inscription
  • ✅ Formulaires de contact
  • ✅ Recherche et filtrage
  • ✅ Paiement et e-commerce
  • ✅ Commentaires et feedback
Pourquoi maîtriser les formulaires ? C'est la base pour interagir avec vos utilisateurs. Un bon formulaire = meilleure expérience utilisateur = plus de conversions.

Les éléments de base

Tout formulaire HTML est composé de quelques éléments clés. Voici les plus importants :

<form> — Le conteneur principal

C'est la balise racine qui encadre tous les champs d'un formulaire :

<form action="/envoyer" method="POST">
    <input type="email" name="email" placeholder="Votre email">
    <button type="submit">Envoyer</button>
</form>

L'attribut action indique où envoyer les données (ex: /api/login). L'attribut method indique GET (données visibles dans l'URL) ou POST (plus sécurisé).

<input> — Le roi des champs

C'est l'élément le plus utilisé. Son attribut type change complètement son comportement :

<input type="email" name="email" placeholder="Entrez votre email">
<input type="password" name="password" placeholder="Mot de passe">
<input type="checkbox" name="conditions" id="conditions">
<input type="radio" name="genre" value="homme">

<label> — Accessibilité obligatoire

<label> relie du texte à un champ. C'est essentiel pour l'accessibilité : quand l'utilisateur clique sur le texte du label, le focus va sur l'input :

<label for="email">Email</label>
<input type="email" id="email" name="email">
Règle d'or : Utilisez TOUJOURS <label>. Même pour les checkboxes et les radios. C'est crucial pour l'accessibilité.

<select> et <textarea> — Les autres champs importants

Pour une liste déroulante :

<label for="pays">Pays</label>
<select id="pays" name="pays">
    <option value="">-- Choisir --</option>
    <option value="fr">France</option>
    <option value="be">Belgique</option>
</select>

Pour du texte multiligne :

<label for="message">Message</label>
<textarea id="message" name="message" rows="5" placeholder="Votre message..."></textarea>

Tous les types d'input

L'attribut type est le plus puissant d'un input. Il change le rendu visuel et ajoute une validation automatique. Voici TOUS les types disponibles :

Type Description Cas d'usage
text Texte simple (par défaut) Noms, adresses, messages courts
email Email. Valide le format automatiquement. Clavier mobile @ Adresse email
password Masque le texte (affiche des points) Mots de passe
number Seulement les chiffres. Clavier mobile numérique Âge, quantité, prix
tel Téléphone. Clavier mobile chiffres + symboles Numéros de téléphone
url URL. Valide format https://. Clavier mobile avec .com Sites web, URLs
search Champ de recherche (desktop = input normal, mobile = clavier spécial) Barres de recherche
date Date au format JJ/MM/AAAA. Sélecteur calendar si supporté Dates de naissance, dates de départ
time Heure au format HH:MM Heures de rendez-vous
datetime-local Date ET heure combinées Réservations, événements
month Mois et année (AAAA-MM) Dates d'expiration, années
week Numéro de semaine Planification hebdomadaire
color Sélecteur de couleur (affiche un color picker) Thèmes, customisation
range Curseur (slider) entre min et max Volume, luminosité, notations
checkbox Plusieurs choix possibles (cases à cocher) Conditions, préférences multiples
radio UN SEUL choix possible (boutons radio) Genre, niveau, une seule option
file Upload de fichier (ouvre un file picker) Photos, documents, avatars
hidden Champ invisible. Stocke des données côté client Tokens CSRF, IDs cachés
submit Bouton pour envoyer le formulaire Bouton d'envoi
reset Bouton pour réinitialiser les champs Effacer le formulaire
button Bouton neutre (aucune action par défaut) Actions JavaScript custom
Mobile first : Utilisez les bons types d'input. type="email" affiche @ sur le clavier mobile, type="tel" affiche les chiffres. Meilleure UX = moins de frustration.

Attributs universels des inputs

Ces attributs fonctionnent sur presque tous les inputs pour contrôler leur comportement :

name — L'identifiant du champ (OBLIGATOIRE pour envoyer les données)

C'est le nom utilisé pour accéder aux données. Quand le formulaire est soumis, les données sont envoyées comme name=value :

<input type="email" name="email">
<!-- Résultat : email=utilisateur@exemple.com -->

id — L'identifiant unique (pour lier avec label et CSS)

L'attribut id crée un identifiant unique pour un élément. Utilisé pour les labels et JavaScript :

<label for="email">Email</label>
<input type="email" id="email" name="email">

type — Change le comportement et la validation

Voir la section précédente pour la liste complète. Choisissez le bon type pour chaque situation.

value — Valeur par défaut ou envoyée

C'est la valeur initiale affichée ou celle qui sera envoyée au serveur :

<input type="text" name="prenom" value="Jean">
<input type="radio" name="genre" value="homme">

placeholder — Texte d'exemple (disparaît quand on tape)

Affiche un exemple ou une instruction :

<input type="email" placeholder="exemple@email.com">

required — Rend le champ obligatoire

Le navigateur valide automatiquement que le champ n'est pas vide :

<input type="email" name="email" required>

disabled — Désactive le champ (grisé, non modifiable)

Utile pour les champs temporairement indisponibles :

<input type="text" name="code" disabled value="AUTO-GENERATED">

readonly — Lecture seule (affichage seulement, pas de modification)

Différent de disabled : la valeur est envoyée au serveur :

<input type="text" name="reference" readonly value="REF-12345">

autocomplete — Autocomplétion du navigateur

Permet au navigateur de suggérer des valeurs précédemment saisies :

<input type="email" name="email" autocomplete="email">
<input type="tel" name="phone" autocomplete="tel">

autofocus — Focus automatique au chargement

Place le curseur dans le champ dès que la page se charge :

<input type="text" name="recherche" autofocus placeholder="Chercher...">

form — Lie l'input à un formulaire spécifique

Permet à un input d'être en dehors du <form> mais toujours associé :

<form id="mon-form"></form>
<input type="email" form="mon-form" name="email">

Attributs de validation

HTML5 offre une validation côté client automatique. Ces attributs contraignent les valeurs acceptées :

min et max — Valeurs minimale et maximale

Pour les nombres et les dates :

<input type="number" name="age" min="18" max="120">
<input type="date" name="naissance" min="1950-01-01" max="2024-12-31">

minlength et maxlength — Longueur du texte

Pour contrôler la longueur des inputs texte :

<input type="password" name="password" minlength="8" maxlength="50">
<textarea name="bio" maxlength="500" placeholder="Max 500 caractères"></textarea>

pattern — Expression régulière

Valide le format avec une regex personnalisée :

<!-- Code postal français (5 chiffres) -->
<input type="text" name="codepostal" pattern="[0-9]{5}" placeholder="75001">

<!-- Numéro de téléphone -->
<input type="tel" pattern="[0-9]{2} [0-9]{2} [0-9]{2} [0-9]{2} [0-9]{2}">

step — Pas d'incrément

Pour les nombres et les sliders :

<input type="number" name="prix" step="0.01" min="0">
<input type="range" name="volume" min="0" max="100" step="5">

multiple — Plusieurs valeurs

Pour files (plusieurs fichiers) et emails :

<input type="file" name="documents" multiple>
<input type="email" name="emails" multiple placeholder="email1@test.com, email2@test.com">
Important : La validation HTML5 se fait côté client. TOUJOURS valider aussi côté serveur. Un utilisateur peut contourner la validation frontend.

UX/Mobile : accessibilité et ergonomie

inputmode — Clavier mobile personnalisé

Force un clavier spécifique sur mobile. Très utile pour améliorer l'UX :

<input type="text" inputmode="numeric" placeholder="Code postal">
<input type="text" inputmode="email" placeholder="Email">
<input type="text" inputmode="tel" placeholder="Téléphone">
<input type="text" inputmode="url" placeholder="Site web">
<input type="text" inputmode="search" placeholder="Chercher...">

Les valeurs possibles sont : text, decimal, numeric, tel, email, url, search, none.

list et datalist — Suggestions d'autocomplétion

Fournit une liste de suggestions sans forcer l'utilisateur à choisir dedans :

<input type="text" name="browser" list="browsers">
<datalist id="browsers">
    <option value="Chrome">
    <option value="Firefox">
    <option value="Safari">
    <option value="Edge">
</datalist>

spellcheck — Vérification orthographique

Active ou désactive la vérification orthographique :

<textarea name="message" spellcheck="true"></textarea>

Accessibilité ARIA

ARIA (Accessible Rich Internet Applications) améliore l'accessibilité pour les personnes en situation de handicap :

aria-label — Description de l'élément

Donne un nom accessible quand il n'y a pas de label visuel :

<button aria-label="Fermer la fenêtre">✕</button>
<input type="search" aria-label="Chercher les produits">

aria-labelledby — Relie à un élément qui décrit

Utilise le texte d'un autre élément comme description :

<h2 id="form-title">Formulaire de contact</h2>
<form aria-labelledby="form-title"></form>

aria-describedby — Description détaillée

Fournit une explication supplémentaire :

<input type="password" aria-describedby="pwd-hint">
<p id="pwd-hint">Le mot de passe doit contenir 8 caractères minimum</p>

aria-required et aria-invalid — État du champ

Indique quand un champ est obligatoire ou invalide :

<input type="email" aria-required="true" aria-invalid="false">

aria-live — Mises à jour dynamiques

Annonce les mises à jour de contenu aux lecteurs d'écran :

<div aria-live="polite">Email envoyé avec succès</div>

Structures avancées

fieldset et legend — Grouper les champs

Organisez les champs liés ensemble. legend donne un titre au groupe :

<fieldset>
    <legend>Adresse personnelle</legend>
    <label>Rue<label>
    <input type="text" name="rue">
    <label>Ville</label>
    <input type="text" name="ville">
</fieldset>

<fieldset>
    <legend>Préférences</legend>
    <label><input type="checkbox" name="newsletter"> Recevoir la newsletter</label>
</fieldset>

optgroup — Regrouper les options select

Organisez les choix d'une liste déroulante en groupes :

<select name="ville">
    <optgroup label="Île-de-France">
        <option>Paris</option>
        <option>Versailles</option>
    </optgroup>
    <optgroup label="Provence">
        <option>Marseille</option>
        <option>Aix-en-Provence</option>
    </optgroup>
</select>

Exemples complets

Formulaire de contact simple

<form action="/api/contact" method="POST">
    <label for="nom">Nom</label>
    <input type="text" id="nom" name="nom" required>

    <label for="email">Email</label>
    <input type="email" id="email" name="email" required>

    <label for="sujet">Sujet</label>
    <select id="sujet" name="sujet" required>
        <option value="">-- Choisir --</option>
        <option value="general">Question générale</option>
        <option value="support">Support technique</option>
    </select>

    <label for="message">Message</label>
    <textarea id="message" name="message" rows="5" required></textarea>

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

Formulaire d'inscription

<form action="/api/signup" method="POST">
    <label for="username">Nom d'utilisateur</label>
    <input type="text" id="username" name="username" minlength="3" maxlength="20" required>

    <label for="email">Email</label>
    <input type="email" id="email" name="email" required>

    <label for="password">Mot de passe</label>
    <input type="password" id="password" name="password" minlength="8" required>

    <fieldset>
        <legend>Genre</legend>
        <label><input type="radio" name="genre" value="h"> Homme</label>
        <label><input type="radio" name="genre" value="f"> Femme</label>
        <label><input type="radio" name="genre" value="a"> Autre</label>
    </fieldset>

    <label><input type="checkbox" name="conditions" required> J'accepte les conditions</label>

    <button type="submit">S'inscrire</button>
</form>

Formulaire de recherche

<form action="/search" method="GET">
    <input type="search" name="q" placeholder="Chercher..." autofocus>
    <button type="submit">Rechercher</button>
</form>

Bonnes pratiques

Pour créer des formulaires de qualité, suivez ces principes :

  • Utilisez TOUJOURS des labels. Jamais de placeholders seuls
  • Choisissez le bon type d'input. type="email" pour emails, type="tel" pour téléphones
  • Validez côté client ET serveur. Frontend pour UX, backend pour sécurité
  • Groupez les champs liés avec fieldset. Meilleure organisation
  • Testez sur mobile. Les champs doivent être utilisables au doigt
  • Utilisez autocomplete. Réduit la frustration utilisateur
  • Rendez les champs accessibles. Aria labels, descriptions claires
  • Indiquez les champs obligatoires. Avec "required" et une indication visuelle
  • Ne cachez jamais les erreurs de validation. Montrez-les clairement
  • N'utilisez pas de placeholders comme label. C'est confus pour l'utilisateur
Performance : Chargez des polices et du CSS avant les formulaires. Les utilisateurs doivent pouvoir interagir rapidement.

Conclusion

Les formulaires HTML5 sont puissants et faciles à maîtriser. Vous disposez maintenant de tous les outils pour créer des formulaires accessibles, rapides et conviviaux.

  • ✅ Connaître tous les types d'input
  • ✅ Utiliser les attributs de validation
  • ✅ Améliorer l'UX mobile avec inputmode
  • ✅ Rendre accessible avec ARIA et labels
  • ✅ Organiser avec fieldset et legend
Prochaine étape : Pratiquez en créant vos propres formulaires. Commencez simple, puis progressez. Les formulaires sont une compétence fondamentale qui vous servira dans TOUS vos projets web.