Champ de saisie
Le champ de saisie est un élément d’interaction avec l’interface permettant à l’usager d’entrer du contenu et/ou des données.
HTML
Un champ de saisie permet à l'utilisateur de saisir des données. Il existe plusieurs types de champs de saisie en fonction du type de données à saisir.
Champ de saisie simple
La structure HTML d'un champ de saisie de base est la suivante :
-
Un conteneur
<div>
de classefr-input-group
, contenant :-
Un intitulé, obligatoire, dans un élément
<label>
de classefr-label
et lié au champ via un attributfor
pour décrire le champ de saisie -
Une description additionnelle, optionnelle, dans un élément
<span>
de classefr-hint-text
à placer dans le<label>
. Cette description peut être utilisée pour donner des indications sur le format attendu. -
Un champ
<input>
de classefr-input
pour saisir les données. Pour une plus grande zone de saisie, il est possible d'utiliser un élément<textarea>
. -
Un message d'erreur/information/avertissement/succès,
optionnel, dans un bloc
fr-messages-group
, lié auaria-describedby
du champ de saisie
-
Un intitulé, obligatoire, dans un élément
Exemple de structure simple
<div class="fr-input-group">
<label class="fr-label" for="text-input">
Libellé champ de saisie
<span class="fr-hint-text">Texte de description additionnel</span>
</label>
<input class="fr-input" aria-describedby="input-messages" id="text-input" type="text">
<div class="fr-messages-group" id="input-messages" aria-live="polite">
</div>
</div>
Champ de saisie avec bouton
Un champ de saisie peut être associé à un bouton pour déclencher une action. La structure HTML est la suivante :
- La structure du champ de saisie avec bouton est identique à celle du champ de saisie simple.
-
La différence réside dans l'ajout d'un bouton
<button>
de classefr-btn
à la suite du champ de saisie<input>
. Le champ de saisie et le bouton doivent être enveloppé dans un élément<div>
de classefr-input-wrap
et une des classes suivantes :-
fr-input-wrap--addon
: Pour accoler un bouton d'envoi et ajouter une bordure bleue sous le champ de saisie (s'utilise avec un bouton primaire). -
fr-input-wrap--action
: Pour placer un bouton d'action à coté (s'utilise avec un bouton secondaire).
-
Exemple de structure avec bouton d'envoi
<div class="fr-input-group">
<label class="fr-label" for="text-input-button">
Libellé champ de saisie
</label>
<div class="fr-input-wrap fr-input-wrap--addon">
<input class="fr-input" aria-describedby="text-input-button-messages" id="text-input-button" type="text">
<button type="button" class="fr-btn">Envoyer</button>
</div>
<div class="fr-messages-group" id="text-input-button-messages" aria-live="polite">
</div>
</div>
Exemple de structure avec bouton d'action
<div class="fr-input-group">
<label class="fr-label" for="text-input-action">
Libellé champ de saisie
</label>
<div class="fr-input-wrap fr-input-wrap--action">
<input class="fr-input" aria-describedby="text-input-action-messages" id="text-input-action" type="text">
<button type="button" class="fr-btn fr-icon-delete-line fr-btn--secondary">Supprimer le champ</button>
</div>
<div class="fr-messages-group" id="text-input-action-messages" aria-live="polite">
</div>
</div>
Groupes de champs de saisie
Voir la documentation sur les formulaires .
Attributs du champs de saisie
Les champs de saisie peuvent être enrichis avec des attributs HTML pour améliorer l'accessibilité et l'expérience utilisateur.
-
aria-describedby
: Permet d'associer un message d'erreur/information/avertissement/succès au champ de saisie. Cet attribut doit contenir l'ID du bloc de message associé. -
spellcheck
: Permet de définir si le navigateur doit vérifier les fautes orthographiques. A désactiver, notamment, sur les champs de connexion et d'inscription. La valeur par défaut dépend du type d'élément et des navigateurs. Les valeurs possibles sont :-
true
pour activer la vérification orthographique. -
false
pour désactiver la vérification orthographique.
-
-
autocapitalize
: Permet de définir si le navigateur doit automatiquement capitaliser les mots saisis dans le champ. A désactivé, notamment, sur les champs d'identifiant et mot de passe. La valeur par défaut dépend de d'élément et des navigateurs. Seuls les navigateurs mobiles, et les données vocales, sont impactés. Les valeurs possibles sont :-
off
pour désactiver la capitalisation automatique. -
on
pour activer la capitalisation automatique de chaque phrase. -
words
pour activer la capitalisation automatique de chaque mot. -
characters
pour activer la capitalisation automatique de chaque caractère.
-
-
autocomplete
: Permet de définir si le navigateur doit proposer des suggestions de saisie pour le champ. Les valeurs possibles sont :-
on
(par défaut) -
off
pour désactiver l'autocompletion qui pourrait être ajouté automatiquement par le navigateur. - Des valeurs en fonction du type de données. Voir l'ensemble des valeurs disponibles .
-
CSS
Installation du CSS
Pour fonctionner correctement, les styles CSS du core, du formulaire, et du composant champ de saisie doivent être importés. Une dépendance au composant bouton est aussi nécessaire pour les champs de saisie avec bouton.
L'import doit se faire avant le contenu de la page dans la partie
<head>
, et de
préférence avec le fichier minifié, car plus léger.
<link href="dist/core/core.min.css" rel="stylesheet">
<link href="dist/component/form/form.min.css" rel="stylesheet">
<link href="dist/component/input/input.min.css" rel="stylesheet">
NB : Il est aussi possible d'importer le CSS global du DSFR
dsfr.min.css
.
Pour fonctionner sur Internet Explorer 11, un fichier legacy peut aussi être importé :
<link href="dist/core/core.legacy.min.css" rel="stylesheet">
<link href="dist/component/form/form.legacy.min.css" rel="stylesheet">
<link href="dist/component/input/input.legacy.min.css" rel="stylesheet">
Variantes de types
Le type de champ de saisie est défini par l'attribut
type
de l'élément
<input>
. Les types
de champs de saisie disponibles sont les suivants :
-
text
: Champ de saisie de texte simple -
email
: Champ de saisie d'adresse email -
password
: Champ de saisie de mot de passe (privilégier l'utilisation du composant mot de passe ) -
tel
: Champ de saisie de numéro de téléphone -
number
: Champ de saisie de nombre -
date
: Champ de saisie de date -
time
: Champ de saisie d'heure -
url
: Champ de saisie d'URL -
search
: Champ de saisie de recherche
Suivant le type de champ de saisie, des styles spécifiques peuvent être appliqués par le navigateur.
-
Le type
date
ajoute un bouton de sélection de date à droite dans champ de saisie. Cette icône est redéfinie par le DSFR pour utiliser les icônes du DSFR. -
Le type
search
ajoute un bouton de réinitialisation à droite dans champ de saisie lorsque du texte a été renseigné.
Variante de champ avec icône
Une icône peut être ajoutée dans le champ de saisie pour apporter une information visuelle supplémentaire. La structure HTML est la suivante :
-
La structure du champ de saisie avec icône est similaire à celle
du champ de saisie avec bouton, avec un le champ
<input>
dans un conteneurfr-input-wrap
. -
L'icône est ajoutée sur ce conteneur avec la classe utilitaire
de l'icône souhaitée
fr-icon-NOM-ICON
.
Exemple de structure avec icône
<div class="fr-input-group">
<label class="fr-label" for="text-input-icon">
Libellé champ de saisie
<span class="fr-hint-text">Texte de description additionnel</span>
</label>
<div class="fr-input-wrap fr-icon-alert-line">
<input class="fr-input" aria-describedby="text-input-icon-messages" id="text-input-icon" type="text">
</div>
<div class="fr-messages-group" id="text-input-icon-messages" aria-live="polite">
</div>
</div>
Variantes d'états
Le champ de saisie est disponible en plusieurs variantes d'états :
-
Le champ en erreur : définie par la classe
fr-input-group--error
. -
Le champ avec succès : définie par la classe
fr-input-group--valid
. -
Le champ désactivée : définie par la classe
fr-input-group--disabled
et l'attributdisabled
sur l'élément<input>
.
Exemple de champ de saisie en erreur
<div class="fr-input-group fr-input-group--error">
<label class="fr-label" for="text-input-error">
Libellé champ de saisie
</label>
<input class="fr-input" aria-describedby="text-input-error-messages" id="text-input-error" type="text">
<div class="fr-messages-group" id="text-input-error-messages" aria-live="polite">
<p class="fr-message fr-message--error" id="text-input-error-message-error">Texte d’erreur</p>
</div>
</div>
Exemple de champ de saisie avec succès
<div class="fr-input-group fr-input-group--valid">
<label class="fr-label" for="text-input-valid">
Libellé champ de saisie
</label>
<input class="fr-input" aria-describedby="text-input-valid-messages" id="text-input-valid" type="text">
<div class="fr-messages-group" id="text-input-valid-messages" aria-live="polite">
<p class="fr-message fr-message--valid" id="text-input-valid-message-valid">Texte de validation</p>
</div>
</div>
Exemple de champ de saisie désactivé
<div class="fr-input-group fr-input-group--disabled">
<label class="fr-label" for="text-input-disabled">
Libellé champ de saisie
</label>
<input class="fr-input" aria-describedby="text-input-disabled-messages" disabled id="text-input-disabled" type="text">
<div class="fr-messages-group" id="text-input-disabled-messages" aria-live="polite">
</div>
</div>
JavaScript
Le composant Champ de saisie ne nécessite pas l'utilisation de JavaScript pour son fonctionnement de base.
Note de version
Voir les évolutions sur github
v1.13.1 - 26 mars 2025
v1.11.0 - 11 décembre 2023
combo champ + button en erreur
- lorsque le champ newsletter de la lettre d'information est en erreur le champs doit être souligné en rouge et non en bleu
#772
met a jour les espacements des icônes
- place l’icône à 16px du bord droit des champs de saisie
- ajuste le padding-right à 44px sur les champs de saisie avec icône
- corrige la largeur des class fr-fieldset__content pour la version dépréciée
#766
color token & cancel button
- corrige le token de couleur de l'intitulé et des icones dans les champs de saisie et du select.
- customisation de l'icone de suppression du champs de recherche : close-circle-fill
#740
v1.10.0 - 19 juillet 2023
ajustement champs particuliers
- Ajuste la largeur des champs de code postal, année et nombre à des multiples de 8v
#679
fix groupe attributes & multiple hint text
- Correction attribut en trop sur les input-group
- multiple texte additionnel sur le modèle de champs d'adresse électronique
- Correction des textes additionnels
#665
ajout de la bordure en état erreur / succés / info
Actuellement la bordure gauche montrant l'état d'erreur/succès/info n'est appliqué que dans le cas d'un groupe de champ en erreur via les modificateur .fr-fieldset--error, .fr-fieldset--valid, .fr-fieldset--info
Afin d'être ISO avec l'UI nous rajoutons cet élément visuel sur :
-
les champs seuls (.fr-input-group) :
-
.fr-input-group--error
-
.fr-input-group--valid
-
.fr-input-group--info
-
-
les selects (.fr-select-group)
-
.fr-select-group--error
-
.fr-select-group--valid
-
.fr-select-group--info
-
#635
v1.9.1 - 11 avril 2023
correction bug icone date-picker firefox version 109+
Depuis la version 109 de Firefox, l'icone date-picker est en double sur les champs type date
- Ajout de l'icone date-picker si le navigateur le supporte uniquement
#585
v1.9.0 - 1 mars 2023
correction placement icone calendrier sur input type="date"
corrige le problème de double icône remonté dans #530
#536