<input>
Un champ de formulaire : texte, e-mail, mot de passe, nombre, date, curseur, case à cocher, fichier et bien plus encore.
- Affichage
- inline-block
- Balise fermante
- Aucune, élément vide
- Contenu autorisé
- Aucun, l’élément est vide
Exemple
#<style>
.fields { display: grid; grid-template-columns: repeat(auto-fill, minmax(210px, 1fr)); gap: 12px; }
.fields label { display: grid; gap: 4px; }
.fields .inline { display: flex; align-items: center; gap: 6px; }
.fields fieldset { border: 0; margin: 0; padding: 0; }
.fields legend { padding: 0; margin-bottom: 4px; }
</style>
<form class="fields">
<label>Prénom <input type="text" name="name" placeholder="par ex. Léa"></label>
<label>E-mail <input type="email" name="email" placeholder="lea@example.com"></label>
<label>Mot de passe <input type="password" name="password"></label>
<label>Âge <input type="number" name="age" min="7" max="99" value="16"></label>
<label>Minutes d’étude par jour <input type="range" name="minutes" min="10" max="120" step="10" value="30"></label>
<label>Début du cours <input type="date" name="start"></label>
<label>Couleur du thème <input type="color" name="accent" value="#8b5cf6"></label>
<label>Rechercher un cours <input type="search" name="q" placeholder="HTML, CSS…"></label>
<label>Photo de profil <input type="file" name="avatar" accept="image/*"></label>
<label class="inline"><input type="checkbox" name="newsletter" checked> Je veux recevoir la newsletter</label>
<fieldset>
<legend>Niveau</legend>
<label class="inline"><input type="radio" name="level" value="beginner" checked> Débutant</label>
<label class="inline"><input type="radio" name="level" value="advanced"> Avancé</label>
</fieldset>
</form>Définition et utilisation
#L’élément <input> est l’élément de formulaire le plus polyvalent qui existe. Son apparence et son comportement dépendent de l’attribut type : le même <input> peut être un champ de texte, un champ de mot de passe, un curseur, un sélecteur de couleur, une case à cocher ou un bouton pour envoyer des fichiers. C’est un élément vide, il n’a donc pas de balise fermante.
Choisir le bon type est un vrai confort. Sur un téléphone, type="email" affiche un clavier avec le symbole @, type="tel" un clavier numérique, et type="date" un calendrier natif. Le navigateur vérifie aussi le format tout seul : un champ e-mail ne laissera pas passer une adresse sans @, et un champ numérique rejettera une valeur hors de la plage min et max.
Chaque champ a besoin d’une étiquette <label>, car le texte de l’attribut placeholder disparaît dès que vous commencez à écrire, et il ne remplace pas une étiquette. Pour que la valeur d’un champ arrive au serveur, le champ doit avoir un attribut name.
Syntaxe
#<input type="text" name="nom">Attributs
#text | email | password | number | range | date | time | datetime-local | month | week | color | checkbox | radio | file | search | tel | url | hidden | submit | reset | button | image
Le genre de champ,textpar défaut. Le type détermine l’apparence, le clavier affiché sur un téléphone et les règles de validation. Un champhiddenest invisible et conserve une valeur envoyée avec le formulaire. Un type que le navigateur ne prend pas en charge se transforme en simple champ de texte. C’est le cas par exemple demonthetweek, qui ne fonctionnent pas dans tous les navigateurs.texte
Le nom sous lequel la valeur du champ arrive au serveur, par exempleemail=lea@example.com. Les champs sansnamene sont pas envoyés. Des boutons radio portant le même nom forment un groupe dans lequel on ne peut sélectionner qu’une seule option.texte
La valeur initiale du champ. Dans les champs de texte, c’est le texte saisi au départ ; dans les cases à cocher et les boutons radio, la valeur envoyée une fois sélectionnée ; et dans les boutonssubmitetbutton, le texte affiché sur le bouton.texte
Une indication visible dans un champ vide, idéalement un exemple du format attendu. Elle disparaît dès que l’utilisateur commence à écrire, donc elle ne remplace jamais une étiquette<label>.attribut booléen
Le champ doit être rempli, ou la case cochée, avant que le formulaire puisse s’envoyer. Si vous essayez d’envoyer un champ vide, le navigateur affiche un message et y place le curseur. Un champ qui respecte les règles correspond au sélecteur:valid, et un champ invalide à:invalid.attribut booléen
Désactive le champ : impossible de cliquer dessus, de l’atteindre avec la touche Tab ou de le modifier, et sa valeur ne sera pas envoyée avec le formulaire. Le navigateur grise généralement un champ ainsi désactivé.attribut booléen
Un champ en lecture seule : vous pouvez le sélectionner, en copier le texte et l’atteindre avec la touche Tab, mais vous ne pouvez pas changer sa valeur. Contrairement àdisabled, la valeur sera envoyée. Cela fonctionne pour les champs de texte, de nombre et de date, mais pas pour les cases à cocher, les boutons radio, les curseurs ni les champs de couleur.attribut booléen
Sélectionne une case à cocher (checkbox) ou un bouton radio (radio) au départ. Dans un groupe de boutons radio portant le même nom, un seul au maximum devrait avoirchecked.nombre, date ou heure
Déterminent la plage et le pas des valeurs dans les champsnumber,range,date,timeet apparentés.step="50"permet de choisir uniquement des valeurs par pas de 50 (0, 50, 100 et ainsi de suite), etstep="any"supprime la contrainte de pas. Les flèches et le curseur respectent ces limites, et une valeur hors de la plage échoue à la validation.nombre de caractères
Le plus petit et le plus grand nombre de caractères autorisés dans un champ de texte.maxlengthempêche simplement d’en saisir davantage, tandis queminlengthest vérifié lors de l’envoi du formulaire. Un champ vide sansrequiredpasse cette validation.expression régulière
Un motif auquel toute la valeur du champ doit correspondre, par exemple un code postal au format00000. Le navigateur compare le motif à tout le texte, vous n’avez donc pas besoin d’ajouter^et$. Placez la description du format attendu près du champ ou dans l’attributtitle, que certains navigateurs ajoutent au message d’erreur.attribut booléen
Permet de donner plusieurs valeurs à la fois : dans un champfile, choisir plusieurs fichiers, et dans un champemail, saisir plusieurs adresses séparées par des virgules.types MIME ou extensions de fichiers
Indique à la fenêtre de sélection de fichiers quoi afficher, par exempleimage/*(n’importe quelle image),.pdfouimage/png, image/jpeg. Ce n’est qu’un filtre dans la boîte de dialogue, que l’utilisateur peut contourner, donc vérifiez quand même le type de fichier sur le serveur.id d’un élément `<datalist>`
Relie le champ à une liste de suggestions<datalist>. L’utilisateur voit des propositions pendant qu’il écrit, mais peut toujours saisir sa propre valeur.on | off | nom de la donnée, par ex. email, username, current-password, new-password, one-time-code
Indique au navigateur et au gestionnaire de mots de passe quel type de donnée correspond au champ. Aveccurrent-password, le gestionnaire suggère le mot de passe enregistré ; avecnew-password, il propose d’en générer un robuste ; etone-time-codepermet de coller un code reçu par SMS en un seul geste. Dans un formulaire de connexion, marquez le champ de l’identifiant commeusername, même si c’est un e-mail qu’on y saisit.attribut booléen
Place le curseur dans le champ dès le chargement de la page. Utilisez-le avec parcimonie, au plus une fois par page, et seulement là où le champ est la raison principale de la visite, comme un champ de recherche. Un saut de focus soudain désoriente les utilisateurs de lecteurs d’écran.
L’élément accepte aussi tous les attributs globaux, comme class, id, style ou hidden.
Attributs en pratique
#type
text | email | password | number | range | date | time | datetime-local | month | week | color | checkbox | radio | file | search | tel | url | hidden | submit | reset | button | imageLe genre de champ, text par défaut. Le type détermine l’apparence, le clavier affiché sur un téléphone et les règles de validation. Un champ hidden est invisible et conserve une valeur envoyée avec le formulaire. Un type que le navigateur ne prend pas en charge se transforme en simple champ de texte. C’est le cas par exemple de month et week, qui ne fonctionnent pas dans tous les navigateurs.
<form>
<p><label>Téléphone <input type="tel" name="phone" placeholder="06 00 10 02 00"></label></p>
<p><label>Site web <input type="url" name="website" placeholder="https://"></label></p>
<p><label>Heure du cours <input type="time" name="time" value="18:30"></label></p>
<p><label>Date limite <input type="datetime-local" name="deadline"></label></p>
<p><label>Mois de début <input type="month" name="month"></label></p>
<input type="hidden" name="course" value="html-101">
<p>
<input type="submit" value="Envoyer">
<input type="reset" value="Effacer">
<input type="button" value="Aperçu">
</p>
</form>name
texteLe nom sous lequel la valeur du champ arrive au serveur, par exemple email=lea@example.com. Les champs sans name ne sont pas envoyés. Des boutons radio portant le même nom forment un groupe dans lequel on ne peut sélectionner qu’une seule option.
<p>Comment voulez-vous apprendre ?</p>
<label><input type="radio" name="mode" value="video"> Vidéo</label>
<label><input type="radio" name="mode" value="text"> Texte</label>
<label><input type="radio" name="mode" value="practice"> Exercices</label>value
texteLa valeur initiale du champ. Dans les champs de texte, c’est le texte saisi au départ ; dans les cases à cocher et les boutons radio, la valeur envoyée une fois sélectionnée ; et dans les boutons submit et button, le texte affiché sur le bouton.
<p><label>Nom d’utilisateur <input type="text" name="username" value="lea_code"></label></p>
<p><label><input type="checkbox" name="topics" value="css" checked> CSS</label></p>
<input type="submit" value="Enregistrer les modifications">placeholder
texteUne indication visible dans un champ vide, idéalement un exemple du format attendu. Elle disparaît dès que l’utilisateur commence à écrire, donc elle ne remplace jamais une étiquette <label>.
<label for="phone">Téléphone</label>
<input type="tel" id="phone" name="phone" placeholder="par ex. 06 00 10 02 00">required
attribut booléenLe champ doit être rempli, ou la case cochée, avant que le formulaire puisse s’envoyer. Si vous essayez d’envoyer un champ vide, le navigateur affiche un message et y place le curseur. Un champ qui respecte les règles correspond au sélecteur :valid, et un champ invalide à :invalid.
<form>
<label>E-mail <input type="email" name="email" required></label>
<button>Envoyer</button>
</form>disabled
attribut booléenDésactive le champ : impossible de cliquer dessus, de l’atteindre avec la touche Tab ou de le modifier, et sa valeur ne sera pas envoyée avec le formulaire. Le navigateur grise généralement un champ ainsi désactivé.
<p><label>Code promo <input type="text" name="promo" value="AUTOMNE2026" disabled></label></p>
<p><label><input type="checkbox" name="certificate" disabled> Certificat (après la fin du cours)</label></p>readonly
attribut booléenUn champ en lecture seule : vous pouvez le sélectionner, en copier le texte et l’atteindre avec la touche Tab, mais vous ne pouvez pas changer sa valeur. Contrairement à disabled, la valeur sera envoyée. Cela fonctionne pour les champs de texte, de nombre et de date, mais pas pour les cases à cocher, les boutons radio, les curseurs ni les champs de couleur.
<label>Votre lien de parrainage
<input type="url" name="referral" value="https://www.codeworlds.com/?ref=lea" size="34" readonly>
</label>checked
attribut booléenSélectionne une case à cocher (checkbox) ou un bouton radio (radio) au départ. Dans un groupe de boutons radio portant le même nom, un seul au maximum devrait avoir checked.
<p><label><input type="checkbox" name="reminders" checked> Rappels d’étude</label></p>
<p>
<label><input type="radio" name="plan" value="monthly"> Mensuel</label>
<label><input type="radio" name="plan" value="yearly" checked> Annuel</label>
</p>min / max / step
nombre, date ou heureDéterminent la plage et le pas des valeurs dans les champs number, range, date, time et apparentés. step="50" permet de choisir uniquement des valeurs par pas de 50 (0, 50, 100 et ainsi de suite), et step="any" supprime la contrainte de pas. Les flèches et le curseur respectent ces limites, et une valeur hors de la plage échoue à la validation.
<p><label>Nombre de participants <input type="number" name="seats" min="1" max="10" value="1"></label></p>
<p><label>Budget en € <input type="range" name="budget" min="0" max="500" step="50" value="150"></label></p>
<p><label>Date limite <input type="date" name="date" min="2026-10-01" max="2026-12-31"></label></p>minlength / maxlength
nombre de caractèresLe plus petit et le plus grand nombre de caractères autorisés dans un champ de texte. maxlength empêche simplement d’en saisir davantage, tandis que minlength est vérifié lors de l’envoi du formulaire. Un champ vide sans required passe cette validation.
<form>
<label>Nom d’utilisateur
<input type="text" name="username" minlength="3" maxlength="16" required>
</label>
<button>Créer un compte</button>
</form>pattern
expression régulièreUn motif auquel toute la valeur du champ doit correspondre, par exemple un code postal au format 00000. Le navigateur compare le motif à tout le texte, vous n’avez donc pas besoin d’ajouter ^ et $. Placez la description du format attendu près du champ ou dans l’attribut title, que certains navigateurs ajoutent au message d’erreur.
<form>
<label>Code postal
<input type="text" name="postal" pattern="[0-9]{5}" placeholder="00000" title="Cinq chiffres">
</label>
<button>Vérifier</button>
</form>multiple
attribut booléenPermet de donner plusieurs valeurs à la fois : dans un champ file, choisir plusieurs fichiers, et dans un champ email, saisir plusieurs adresses séparées par des virgules.
<p><label>Captures d’écran du projet <input type="file" name="screens" accept="image/*" multiple></label></p>
<p><label>Inviter des amis <input type="email" name="friends" size="34" placeholder="emma@example.com, hugo@example.com" multiple></label></p>accept
types MIME ou extensions de fichiersIndique à la fenêtre de sélection de fichiers quoi afficher, par exemple image/* (n’importe quelle image), .pdf ou image/png, image/jpeg. Ce n’est qu’un filtre dans la boîte de dialogue, que l’utilisateur peut contourner, donc vérifiez quand même le type de fichier sur le serveur.
<p><label>Avatar (PNG ou JPG) <input type="file" name="avatar" accept="image/png, image/jpeg"></label></p>
<p><label>CV en PDF <input type="file" name="cv" accept=".pdf,application/pdf"></label></p>list
id d’un élément `<datalist>`Relie le champ à une liste de suggestions <datalist>. L’utilisateur voit des propositions pendant qu’il écrit, mais peut toujours saisir sa propre valeur.
<label>Langage préféré
<input type="text" name="language" list="languages">
</label>
<datalist id="languages">
<option value="JavaScript">
<option value="Python">
<option value="TypeScript">
<option value="Go">
</datalist>autocomplete
on | off | nom de la donnée, par ex. email, username, current-password, new-password, one-time-codeIndique au navigateur et au gestionnaire de mots de passe quel type de donnée correspond au champ. Avec current-password, le gestionnaire suggère le mot de passe enregistré ; avec new-password, il propose d’en générer un robuste ; et one-time-code permet de coller un code reçu par SMS en un seul geste. Dans un formulaire de connexion, marquez le champ de l’identifiant comme username, même si c’est un e-mail qu’on y saisit.
<form>
<p><label>E-mail <input type="email" name="email" autocomplete="username"></label></p>
<p><label>Mot de passe <input type="password" name="password" autocomplete="current-password"></label></p>
<p><label>Code reçu par SMS <input type="text" name="code" inputmode="numeric" autocomplete="one-time-code"></label></p>
</form>autofocus
attribut booléenPlace le curseur dans le champ dès le chargement de la page. Utilisez-le avec parcimonie, au plus une fois par page, et seulement là où le champ est la raison principale de la visite, comme un champ de recherche. Un saut de focus soudain désoriente les utilisateurs de lecteurs d’écran.
<label>Rechercher une leçon <input type="search" name="q" autofocus></label>Dans un aperçu intégré dans une iframe, le navigateur peut ignorer autofocus.
Compatibilité des navigateurs
#Largement disponible
Fonctionne dans tous les navigateurs modernes, y compris sur mobile. Vous pouvez l’utiliser sans crainte.
- Chrome
- Edge
- Firefox
- Safari
Bonnes pratiques
#- Associez chaque champ à une étiquette : enveloppez-le dans
<label>, ou donnez unidau champ et indiquez-le dans<label for="…">. Cliquer sur l’étiquette placera alors le curseur dans le champ. - N’utilisez pas
type="number"pour les numéros de téléphone, les codes postaux ou les numéros de carte. Ce type ajoute des flèches pour augmenter la valeur et sert pour des nombres sur lesquels on calcule, pas pour des suites de chiffres. Choisisseztype="tel"outype="text"avecinputmode="numeric". - La validation du navigateur (
required,pattern,min) aide l’utilisateur, mais ne protège pas le serveur. Vérifiez toujours aussi les données côté serveur.
Entrées associées
#- <label>L’étiquette d’un champ de formulaire. Cliquer sur l’étiquette déplace le curseur vers le champ.
- <form>Un formulaire qui collecte des données auprès de l’utilisateur et les envoie à une adresse donnée.
- <button>Un bouton cliquable : il envoie un formulaire, le réinitialise, ou lance une action sur la page.
- <datalist>Une liste de suggestions pour un champ `<input>`. Vous pouvez choisir une proposition ou saisir votre propre valeur.
- <textarea>Un champ de texte multiligne pour des saisies plus longues : messages, avis, descriptions.
- <select>Une liste déroulante dans laquelle l’utilisateur choisit une ou plusieurs options.
Vous voyez une erreur ou il manque un exemple ? Écrivez-nous.