Commandes d’étiquetage
Pratiques exemplaires pour les contrôles d’étiquetage
Les commandes de formulaire comprennent les champs de texte, les champs de sélection de fichiers, les cases à cocher, les boutons radio et les listes déroulantes.
Suivez les pratiques exemplaires suivantes pour les en-têtes :
- Fournir des étiquettes pour décrire la fonction de commande de formulaire.
- Utiliser l’élément
<label>
. - Associer exactement l’attribut "
for
" de l’étiquette à l’attribut "id
" de la commande de formulaire pour les associer explicitement. - Voici les éléments qui utilisent des étiquettes explicitement associées :
input type="text"
input type="checkbox"
input type="radio"
input type="file"
(champs de sélection de fichier)input type="password"
textarea
select
(listes déroulantes)
- Ne pas utiliser l’élément
<label>
pour les éléments suivants.- Boutons Soumettre et Réinitialisation (
input type="submit"
ouinput type="reset"
)- Étiquette fournie par l’attribut de valeur
- Boutons image (
input type="image"
)- Étiquette fournie par l’attribut
alt
- Étiquette fournie par l’attribut
- Champs de saisie masqués (
input type="hidden"
) - Boutons (éléments de bouton ou
<input type="button">
)- Étiquette fournie par le contenu de l’élément lui-même (
<button>
texte</button>
) ou par l'attributvalue
,aria-label
ouaria-labelledby
.
- Étiquette fournie par le contenu de l’élément lui-même (
- Boutons Soumettre et Réinitialisation (
- Utiliser des étiquettes ARIA (les attributs
aria-labelledby
etaria-label
) lorsqu’il n’est pas possible d’utiliser<label>
- Lorsque vous utilisez des étiquettes ARIA, ajoutez tout texte visible dans l’étiquette de commande.
- Utiliser l’attribut
aria-labelledby
pour extraire une étiquette du contexte, en faisant appel à un ou plusieurs éléments du contexte. - Éviter d’utiliser l’attribut
title
pour identifier les commandes de formulaire. Ce n’est pas largement pris en charge par la technologie d'assistance. - Le texte de l’étiquette doit être court et concis.
- Utilisez des valeurs d'étiquettes uniques sur une page.
- Placer les étiquettes visuellement à droite des boutons radio et des cases à cocher.
- Placer les étiquettes de façon visuelle, directement au-dessus des champs de formulaire (de préférence par la BOEW) ou à gauche (solution de rechange à la BOEW, lorsqu’il faut conserver un espace vertical).
Bon exemple : Associer explicitement les étiquettes en utilisant les attributs for/id
Utiliser l’élément <label>
pour associer explicitement le texte aux éléments du formulaire, dans la mesure du possible. L’attribut for
de l’étiquette doit correspondre exactement au id
de la commande de formulaire.
Privilégiez l'utilisation de l'élément HTML <label>
pour associer les commandes pour nommer les contrôles de formulaire plutôt que l'utilisation d'un label ARIA.
L'exemple commence
L'exemple finit
HTML
Début du code
<div class="form-group">
<label for="firstname">Prénom<label>
<input type="text" name="firstname" id="firstname">
</div>
<div class="form-group">
<input type="checkbox" name="married" id="married">
<label for="married">Marié(e)</label>
</div>
Fin du code
Bon exemple : Masquer visuellement l’élément d’étiquette
Masquez visuellement l'élément <label>
afin d'éviter la redondance pour les utilisateurs qui peuvent identifier le but visuellement. Dans cet exemple, la classe WET .wb-inv
masque efficacement l'étiquette "Search" aux utilisateurs voyants, mais l'élément est toujours présent dans le HTML et est rencontré par les utilisateurs de technologies d'assistance.
L'exemple commence
L'exemple finit
HTML
Début du code
<label for="search" class="wb-inv">Search</label>
<input type="text" name="search" id="search">
<button type="submit">Search</button>
Fin du code
CSS
Début du code
.wb-inv {
clip: rect(1px,1px,1px,1px);
height: 1px;
margin: 0;
overflow: hidden;
position: absolute;
width: 1px;
}
Fin du code
Utilisez la classe BOEW .wb-inv
pour masquer visuellement un élément, conformément au guide de style de la BOEW : Contenu visible et invisible.
Bon exemple : Utiliser aria-label
Utiliser un attribut aria-label
pour nommer les saisies et autres commandes directement avec du texte non visuel. Cette approche ne doit être utilisée que lorsque l’étiquette de la commande ne correspond pas au contenu environnant. L’information contenue dans aria-label
n’est pas affichée visuellement.
Dans cet exemple, un champ de saisie de recherche n'a pas besoin d'étiquette visuelle puisque le bouton d'envoi situé juste à côté porte l'étiquette "Recherche". Comme les utilisateurs non voyants rencontrent le contenu de manière linéaire, en lisant le champ de saisie avant le bouton, nous nommons le champ de saisie avec l'attribut aria-label
.
L'exemple commence
L'exemple finit
HTML
Début du code
<input type="text" name="search" aria-label="Recherche">
<button type="submit">Recherche</button>
Fin du code
Bon exemple : Utilisation d’aria-labelledby pour concaténer une étiquette provenant de plusieurs sources
Une <label>
ne peut pointer que vers une seule commande de formulaire. Avec aria-labelledby
, un élément peut aider à étiqueter de nombreuses commandes de formulaire, et une commande de formulaire peut être étiquetée par de nombreux éléments.
Utiliser un attribut aria-labelledby
pour identifier les entrées de formulaires et autres commandes avec des noms extraits des éléments environnants. Cette approche ne doit être utilisée que lorsque l’étiquette de la commande ne correspond pas au contenu environnant.
Dans cet exemple, chaque service est accompagné d’un bouton « Ajouter au panier ». Un attribut aria-labelledby
permet de distinguer les boutons les uns des autres en concaténant un nom à partir du bouton lui-même et de l’en-tête qui précède (p. ex., « Ajouter au panier Service 1 »). L’attribut aria-labelledby
contient les valeurs d’attribut id
des éléments avec les noms descriptifs. Comme l’illustre cet exemple, l’attribut aria-labelledby
peut construire un nom en partie à partir de son propre nom d’élément natif.
L'exemple commence
Service 1
[paragraphe descriptif]
Service 2
[paragraphe descriptif]
Service 3
[paragraphe descriptif]
L'exemple finit
HTML
Début du code
<h3 id="service1">Service 1</h3>
<p>[paragraphe descriptif]</p>
<button id="add1" aria-labelledby="add1 service1" type="submit">
Ajouter au panier
</button>
<h3 id="service2">Service 2</h3>
<p>[paragraphe descriptif]</p>
<button id="add2" aria-labelledby="add2 service2" type="submit">
Ajouter au panier
</button>
<h3 id="service3">Service 3</h3>
<p>[paragraphe descriptif]</p>
<button id="add3" aria-labelledby="add3 service3" type="submit">
Ajouter au panier
</button>
Fin du code
Bon exemple : Utilisation d’aria-labelledby pour concaténer une étiquette provenant de plusieurs sources
Dans l’exemple ci-dessous, les saisies de texte utilisent aria-labelledby
pour faire référence aux cellules d’en-tête de ligne et d’en-tête de colonne.
L'exemple commence
Nom | Numéro du bureau | Téléphone |
---|---|---|
Cyndi | ||
Jared | ||
Jonathan |
L'exemple finit
Voir le HTML
Début du code
<table>
<thead>
<tr>
<th scope="col">Nom</th>
<th id="officenum" scope="col">Numéro du bureau</th>
<th id="phonelabel" scope="col">Téléphone</th>
</tr>
</thead>
<tbody>
<tr>
<th id="cyndi" scope="row">Cyndi</th>
<td>
<input type="text" size="4" name="office1" aria-labelledby="cyndi officenum">
</td>
<td>
<input type="text" size="12" name="phone1" aria-labelledby="cyndi phonelabel">
</td>
</tr>
<tr>
<th id="jared" scope="row">Jared</th>
<td>
<input type="text" size="4" name="office2" aria-labelledby="jared officenum">
</td>
<td>
<input type="text" size="12" name="phone2" aria-labelledby="jared phonelabel">
</td>
</tr>
<tr>
<th id="jon" scope="row">Jonathan</th>
<td>
<input type="text" size="4" name="office3" aria-labelledby="jon officenum">
</td>
<td>
<input type="text" size="12" name="phone3" aria-labelledby="jon phonelabel">
</td>
</tr>
</tbody>
</table>
Fin du code
Bon exemple : Boutons d’étiquetage
L’élément <button>
crée un bouton cliquable. Dans le contenu de l’élément bouton, vous pouvez mettre du texte et des balises comme <i>
, <b>
, <strong>
, <br>
, <img>
, etc.
Vous pouvez également utiliser l'élément <input>
pour créer des boutons, auquel cas l'étiquette est définie dans l'attribut value
de l'élément.
Si vous utilisez <input type="image">
, l’étiquette se trouve dans l’attribut alt
.
HTML
Début du code
<button type="submit">Submit</button>
<button type="button">Cancel</button>
<button>Activate</button>
<input type="submit" value="Soumettre">
<input type="button" value="Cancel">
<input type="image" src="searchbutton.jpg" alt="Recherche">
Fin du code
Bon exemple : Bouton d’étiquetage des images utilisant l’attribut aria-label
Dans cet exemple, un attribut aria-label
nomme le bouton, au lieu de l’attribut alt
de l’élément enfant <img>
. L’attribut alt
est réglé à nul (vide): alt=""
.
L'exemple commence
L'exemple finit
HTML
Début du code
<button aria-label="Suivant">
<img src="images/next.png" alt="">
</button>
Fin du code
Ressources WCAG connexes
Ressources WCAG connexes
Critères de succès
- 1.1.1 : Contenu non textuel
- 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)
- G162 : Positionner les étiquettes afin de maximiser la prévisibilité des relations (en anglais)
- G167 : Utiliser un bouton adjacent pour identifier visuellement la fonction d'un champ (en anglais)
- H44 : Utiliser l'élément label pour associer les étiquettes avec les champs de formulaire (en anglais)
- H65 : Utiliser l'attribut title pour identifier un champ de formulaire quand l'élément label ne peut pas être utilisé (en anglais)
- H93 : S'assurer que les attributs id sont uniques sur une page Web (en anglais)
- ARIA6 : Utiliser aria-label pour attribuer des étiquettes aux objets (en anglais)
- ARIA9 : Utiliser aria-labelledby pour concaténer une étiquette provenant de plusieurs nœuds de texte (en anglais)
- ARIA16 : Utiliser aria-labelledby pour attribuer un nom à des commandes d’interface d’utilisateur (en anglais)