Instructions du formulaire
Aperçu : Instructions du formulaire
Les instructions du formulaire aident les utilisateurs à comprendre la façon de remplir le formulaire et d’utiliser les commandes individuelles du formulaire. Indiquer les saisies, les formats de données et les autres renseignements pertinents requis.
Instructions générales
Fournir les instructions du formulaire au-dessus du formulaire avant la balise <form>
d’ouverture. Indiquer toute saisie obligatoire et facultative, les formats de données autorisés, les limites de temps et toute instruction générale qui s’appliquent à l’ensemble du formulaire.
Remarque : Les utilisateurs du lecteur d’écran pourraient facilement rater les instructions générales du formulaire imbriquées dans un élément <form>
. Les lecteurs d’écran entrent en « mode formulaires » une fois dans un formulaire, désactivant ainsi les raccourcis clavier de balayage de texte pour permettre à l’utilisateur de taper directement dans les champs input
et textarea
. La navigation au clavier se limite aux éléments pouvant être ciblés (saisies de formulaires, liens et autres commandes) au moyen de la touche Tab. Le texte qui n’est pas associé par un programme à un élément pouvant être ciblé – servant d’étiquette ou de description – est facilement omis.
Voici des exemples d'instructions pour un formulaire :
- Tous les champs marqués « obligatoire » doivent être remplis.
- Les dates doivent toutes être entrées selon le format aaaa/mm/jj (comme dans 2022/01/05).
- Vous trouverez de l’aide supplémentaire immédiatement après chaque champ
Instructions incluses
Des instructions incluses sont fournies à l’intérieur ou à l’extérieur de l’étiquette de commande du formulaire. De courtes instructions peuvent être insérées dans l’étiquette avec le nom de la commande. Les instructions longues devraient être à l’extérieur de l’étiquette et être associées à la commande par l’aria-describedbyattribut aria-describedby
.
Fournir des instructions dans les étiquettes
Les agents utilisateurs prennent en charge sans difficulté les instructions fournies dans les étiquettes, mais celles-ci devraient être réservées aux instructions plus courtes. Associer l’attribut for
de l’étiquette à l’attribut id
de la commande du formulaire.
Bon exemple : Fournir des instructions dans une étiquette
Le format requis pour « l'identification de l'employé » est indiqué par le format « XX-1234 » dans la même étiquette :
L'exemple commence
L'exemple finit
HTML
Début du code
<label for="employee-id">Employee ID (XX-1234)</label>
<input type="text" name="employee-id" id="employee-id">
Fin du code
Fournir des instructions à l’extérieur des étiquettes
Utiliser ARIA pour fournir des instructions à l’extérieur des étiquettes. Associer tout texte descriptif du formulaire à l’élément pertinent du formulaire en utilisant l’attribut aria-labelledby
ou aria-describedby
.
Bon exemple : Fournir des instructions de contrôle de formulaire en utilisant aria-labelledby
Une approche pour fournir des instructions en dehors des étiquettes utilise l'attribut aria-labelledby
sur le contrôle :
- Un élément
<label>
est associé à sa commande au moyen de valeurs d’attribut correspondantesfor
etid
. - L'attribut
aria-labelledby
du contrôle fait référence aux valeurs de l'attributid
de l'élément lui-même et de l'élément contenant la description.
Cette approche garantit que la description supplémentaire est communiquée à la technologie d’assistance, mais elle ne devrait être utilisée qu’avec de courtes descriptions
L'exemple commence
L'exemple finit
HTML
Début du code
<label for="health-card">Carte assurance maladie</label>
<input type="text" id="health-card" aria-labelledby="health-card hc-format" name="health-card">
<span id="hc-format">1234-567-890-XX</span>
Fin du code
Bon exemple : Fournir des instructions de contrôle de formulaire avec aria-describedby
L'approche la plus courante pour fournir des instructions en dehors des étiquettes consiste à utiliser l'attribut aria-describedby
. Cet attribut est défini sur le contrôle et pointe vers la valeur de l'attribut id
de l'élément contenant la description.
L'exemple commence
L'exemple finit
HTML
Début du code
<div class="form-group">
<label for="password1">Mot de passe</label>
<div>
<input type="password" id="password1" aria-describedby="passDesc" name="password1">
<div id="passDesc">Doit contenir au moins huit caractères, une lettre majuscule et un caractère spécial<</div>
</div>
</div>
Fin du code
Texte d’espace réservé
Le texte de l'attribut placeholder
fournit des instructions ou un exemple du format de données requis à l'intérieur des champs de formulaire qui n'ont pas encore été modifiés par l'utilisateur.
Notez que le texte de remplacement disparaît des champs d'un formulaire lorsque les utilisateurs commencent à saisir du texte. Si ce texte contient des informations pédagogiques ou des exemples qui disparaissent, il est plus difficile pour les utilisateurs de vérifier leurs réponses avant de soumettre le formulaire.
Le texte d’espace réservé ne remplace pas les étiquettes. Les technologies d’assistance comme les lecteurs d’écran ne traitent pas le texte d’espace réservé comme des étiquettes.
L'exemple commence
L'exemple finit
HTML
Début du code
<div>
<label for="search">Recherche</label>
<input type="text" name="search" id="search" placeholder="e.g., cours sur l’accessibilité">
</div>
<div>
<label for="email">Courriel</label>
<input type="email" name="email" id="email" placeholder="jane.doe@gmail.com" autocomplete="email">
</div>
Fin du code
Styliser l’espace réservé
Dans de nombreux navigateurs, la couleur d’attribut placeholder
réservé échoue au test de contraste, ce qui empêche de nombreuses personnes de voir distinctement. La couleur de l’espace réservé peut être stylisée à l’aide de CSS.
L’extrait de code ci-dessous établit la couleur d’avant-plan à un gris moyen (no hex 767676) sur fond blanc, ce qui satisfait tout juste à l’exigence minimale de rapport de contraste de 4,5:1.
L'exemple commence
L'exemple finit
Voir le HTML
Début du code
<div>
<label for="search">Recherche de cours</label>
<input type="text" name="search" id="search" placeholder="e.g., cours sur l’accessibilité">
</div>
<div>
<label for="fname">Prénom</label>
<input type="text" name="fname" id="fname">
</div>
<div>
<label for="lname">Nom de famille</label>
<input type="text" name="lname" id="lname">
</div>
<div>
<label for="email">Courriel</label>
<input type="text" name="email" id="email" placeholder="jane.doe@gmail.com">
</div>
Fin du code
Voir le CSS
Début du code
::-webkit-input-placeholder {
color: #767676 !important;
opacity: 1;
}
:-moz-placeholder {
/* Firefox 18- */
color: #767676 !important;
opacity: 1;
}
::-moz-placeholder {
/* Firefox 19+ */
color: #767676 !important;
opacity: 1;
}
:-ms-input-placeholder {
color: #767676 !important;
opacity: 1;
}
Fin du code
Les instructions relatives aux groupes
En "mode focus", lors de la tabulation dans le formulaire, les utilisateurs de lecteurs d'écran mettent le focus sur les contrôles de formulaire et entendent leurs étiquettes et descriptions. Le texte d'un élément non focalisable n'est pas pris en compte, sauf s'il est associé par programme à un contrôle de formulaire en tant qu'étiquette ou description.
Bon exemple : Instructions de groupe dans une <legend>
Dans cet exemple, le mot « Requis » est défini dans la <legend>
pour indiquer que tout ce qui se trouve dans le champ correspondant est requis. Selon la configuration, certains lecteurs d’écran lisent la légende avec chaque élément de forme, une fois ou, rarement, pas du tout. Gardez les légendes courtes et explicites.
L'exemple commence
L'exemple finit
Voir le HTML
Début du code
<fieldset>
<legend class="required">
Renseignements d’ouverture de session (Requis)
</legend>
<label for="username" class="required">Nom d’utilisateur</label>
<input type="text" id="username" required autocomplete="username">
<label for="password2" class="required">Mot de passe</label>
<input type="password" id="password2" required autcomplete="current-password">
<label for="email" class="required">Courriel</label>
<input type="email" id="email" required autcomplete="email">
<label for="phone" class="required">Téléphone</label>
<input type="tel" id="phone" required auto-complete="tel-national">
</fieldset>
Fin du code
Voir le CSS
Début du code
label.required:before,
legend.required:before {
content: "* ";
margin-left: -0.665em;
color: #d3080c;
font-weight: 700;
}
Fin du code
Mauvais exemple : Instructions dans un paragraphe non associé à un contrôle
Lorsque les instructions se trouvent dans un élément <p>
non associé via aria-describedby
, elles sont facilement manquées par les utilisateurs qui naviguent dans le formulaire en "mode formulaire" du lecteur d'écran.
L'exemple commence
L'exemple finit
Voir le HTML
Début du code
<fieldset>
<legend>
Créer un compte d’utilisateur
</legend>
<p>
<label for="username">Nom d’utilisateur</label>
<input type="text" id="username">
</p>
<p>Les mots de passe doivent correspondre.</p>
<p>
<label for="password3">Mot de passe</label>
<input type="password" id="password3">
</p>
<p>
<label for="retype">Retapez votre mot de passe</label>
<input type="password" id="retype">
</p>
<p>
<label for="email">Courriel</label>
<input type="email" id="email">
</p>
<p>
<label for="phone">Téléphone<label>;j
<input type="tel" id="phone">
</p>
</fieldset>
Fin du code
Bon exemple : Instructions partagées associées à plusieurs champs de formulaire
Dans certaines situations, les instructions partagées peuvent être associées à plusieurs champs de formulaire.
L'exemple commence
L'exemple finit
Voir le HTML
Début du code
<fieldset>
<legend>Créer un compte d’utilisateur</legend>
<p>
Les champs Nom d'utilisateur et Mot de passe <span id="specialchar">ne doivent PAS contenir de caractères spéciaux.</span>
</p>
<p>
<label for="username">Nom d’utilisateur</label>
<input type="text" id="username" aria-describedby="specialchar">
</p>
<p>
<label for="password4">Mot de passe</label>
<input type="password" id="password4" aria-describedby="specialchar">
</p>
<p>
<label for="email">Courriel</label>
<input type="email" id="email">
</p>
<p>
<label for="phone">Téléphone</label>
<input type="tel" id="phone">
</p>
</fieldset>
Fin du code
Bon exemple : Fournir des instructions en texte clair avant le formulaire
Dans cet exemple, les instructions générales du formulaire précèdent la balise d’ouverture <form>
, où les utilisateurs du lecteur d’écran peuvent facilement y accéder. Si les instructions en texte clair se trouvaient à l’intérieur de l’élément <form>
, les utilisateurs pourraient facilement les manquer puisque la navigation à l’intérieur d’un formulaire se limite aux éléments faciles à cibler (aussi appelés « mode formulaires »).
L'exemple commence
Choisissez les comptes source et destination ci-dessous pour effectuer votre virement de fonds:
L'exemple finit
HTML
Début du code
<p>Choisissez les comptes source et destination ci-dessous pour effectuer votre virement de fonds:</p>
<form action="/action.php" method="get">[…]</form>
Fin du code
Ressources WCAG connexes
Ressources WCAG connexes
Critères de succès
- 1.3.1 : Information et relations
- 2.4.6 : En-têtes et étiquettes
- 3.3.2 : Étiquettes ou instructions
- 4.1.2 : Nom, rôle et valeur
Techniques
- G131 : Fournir des étiquettes descriptives (en anglais)
- ARIA10 : Utiliser aria-labelledby pour fournir un équivalent textuel pour un contenu non textuel (en anglais)
- ARIA9 : Utiliser aria-labelledby pour concaténer une étiquette provenant de plusieurs nœuds de texte (en anglais)
- ARIA1 : Utiliser la propriété ARIA describedby pour fournir une étiquette descriptive aux contrôles de saisie (en anglais)
- G89 : Fournir de l'information sur le format des données attendu et des exemples (en anglais)
- G184 : Fournir des instructions textuelles au début d'un formulaire ou d'un ensemble de champs pour décrire les données requises (en anglais)
- H44 : Utiliser l'élément label pour associer les étiquettes avec les champs de formulaire (en anglais)
- H90 : Indiquer les champs de formulaire obligatoires (en anglais)
- H93 : S'assurer que les attributs id sont uniques sur une page Web (en anglais)