{"id":5412,"date":"2026-07-16T09:29:18","date_gmt":"2026-07-16T07:29:18","guid":{"rendered":"https:\/\/ideance.net\/blog\/?p=5412"},"modified":"2026-07-17T15:20:25","modified_gmt":"2026-07-17T13:20:25","slug":"6-mauvaises-facons-dutiliser-la-balise-label-pour-un-champ-de-formulaire","status":"publish","type":"post","link":"https:\/\/ideance.net\/blog\/en\/5412\/6-mauvaises-facons-dutiliser-la-balise-label-pour-un-champ-de-formulaire\/","title":{"rendered":"6 mauvaises fa\u00e7ons d\u2019utiliser la balise label pour un champ de formulaire"},"content":{"rendered":"<h2 class=\"wp-block-heading\">Qu&rsquo;est-ce qu&rsquo;un <code>&lt;label&gt;<\/code> ?<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Le <code>&lt;label&gt;<\/code> permet d&rsquo;associer un intitul\u00e9 \u00e0 un champ de formulaire (<code>&lt;input&gt;<\/code>, <code>&lt;select&gt;<\/code>, <code>&lt;textarea&gt;<\/code>&#8230;).<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Cette association est essentielle pour les personnes aveugles ou fortement malvoyantes qui utilisent un lecteur d&rsquo;\u00e9cran, mais aussi pour les personnes ayant des troubles moteurs (elle agrandit la zone cliquable du champ).<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Voici un exemple simple :<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&lt;label for=\"email\"&gt;Adresse e-mail&lt;\/label&gt;\n&lt;input type=\"email\" id=\"email\"&gt;<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Pourtant, lors des audits de conformit\u00e9 au RGAA ou RAWeb, le <code>&lt;label&gt;<\/code> est tr\u00e8s souvent mal utilis\u00e9, voire compl\u00e8tement absent.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Voici les erreurs les plus courantes.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">1 : L&rsquo;oubli pur et simple<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">C&rsquo;est l&rsquo;erreur la plus basique mais aussi une des plus fr\u00e9quentes.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code><strong><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-luminous-vivid-amber-color\">Adresse e-mail<\/mark><\/strong>\n&lt;input type=\"email\" id=\"email\"&gt;<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Sans <code>&lt;label&gt;<\/code> associ\u00e9, les technologies d&rsquo;assistance peuvent :<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Ne rien annoncer du tout.<\/li>\n\n\n\n<li>Ou lire un intitul\u00e9 g\u00e9n\u00e9rique et inutile comme \u00ab champ de saisie \u00bb.<\/li>\n<\/ul>\n\n\n\n<p class=\"ice-block is-green wp-block-paragraph\"><strong>\u00c0 retenir : tout champ de formulaire doit avoir un label associ\u00e9, sans exception.<\/strong><\/p>\n\n\n\n<h2 class=\"wp-block-heading\">2 : Casser l&rsquo;association avec le <code>for<\/code> \/ <code>id<\/code><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Parfois le <code>&lt;label&gt;<\/code> existe mais il n&rsquo;est associ\u00e9 \u00e0 rien, \u00e0 cause d&rsquo;une faute de frappe ou d&rsquo;un <code>id<\/code> dupliqu\u00e9 ailleurs sur la page.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&lt;label <mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-luminous-vivid-amber-color\"><strong>for=\"mail\"<\/strong><\/mark>&gt;Adresse e-mail&lt;\/label&gt;\n&lt;input type=\"email\"<mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-luminous-vivid-amber-color\"><strong> id=\"email\"<\/strong><\/mark>&gt;<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Ici, <code>for=\"mail\"<\/code> ne correspond \u00e0 aucun <code>id=\"mail\"<\/code> : le lien est rompu. Le lecteur d&rsquo;\u00e9cran annoncera le champ sans son intitul\u00e9.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&lt;label<mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-luminous-vivid-amber-color\"><strong> for=\"email\"<\/strong><\/mark>&gt;Adresse e-mail&lt;\/label&gt;\n&lt;input type=\"email\" <strong><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-luminous-vivid-amber-color\">id=\"email\"<\/mark><\/strong>&gt;<\/code><\/pre>\n\n\n\n<p class=\"ice-block is-green wp-block-paragraph\"><strong>\u00c0 retenir : le <code>for<\/code> et l&rsquo;<code>id<\/code> doivent \u00eatre identiques, uniques dans la page, et v\u00e9rifi\u00e9s apr\u00e8s chaque modification du code.<\/strong><\/p>\n\n\n\n<h2 class=\"wp-block-heading\">3 : Un label trop vague, coup\u00e9 de son contexte<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Un intitul\u00e9 peut \u00eatre pr\u00e9sent et pourtant inutile une fois lu hors contexte visuel.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&lt;label for=\"champ1\"&gt;<strong><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-luminous-vivid-amber-color\">Nom<\/mark><\/strong>&lt;\/label&gt;\n&lt;input type=\"text\" id=\"champ1\"&gt;\n\n&lt;label for=\"champ2\"&gt;<strong><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-luminous-vivid-amber-color\">Nom<\/mark><\/strong>&lt;\/label&gt;\n&lt;input type=\"text\" id=\"champ2\"&gt;<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Un lecteur d&rsquo;\u00e9cran \u00e9noncera deux fois \u00ab Nom \u00bb, sans qu&rsquo;on sache lequel concerne la personne factur\u00e9e et lequel concerne le destinataire.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&lt;label for=\"nom-facturation\"&gt;<mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-luminous-vivid-amber-color\"><strong>Nom (facturation)<\/strong><\/mark>&lt;\/label&gt;\n&lt;input type=\"text\" id=\"nom-facturation\"&gt;\n\n&lt;label for=\"nom-livraison\"&gt;<mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-luminous-vivid-amber-color\"><strong>Nom (destinataire de la livraison)<\/strong><\/mark>&lt;\/label&gt;\n&lt;input type=\"text\" id=\"nom-livraison\"&gt;<\/code><\/pre>\n\n\n\n<p class=\"ice-block is-green wp-block-paragraph\"><strong>\u00c0 retenir : un label doit rester compr\u00e9hensible m\u00eame sorti de son environnement visuel.<\/strong><\/p>\n\n\n\n<h2 class=\"wp-block-heading\">4 : Utiliser un <code>placeholder<\/code> \u00e0 la place d&rsquo;un <code>&lt;label&gt;<\/code><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Une erreur tr\u00e8s r\u00e9pandue consiste \u00e0 se dire qu&rsquo;un <code>placeholder<\/code> suffit.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&lt;input type=\"search\" <strong><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-luminous-vivid-amber-color\">placeholder=\"Nom complet\"<\/mark><\/strong>&gt;<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Probl\u00e8me : ici, rien n&rsquo;indique \u00e0 un lecteur d&rsquo;\u00e9cran \u00e0 quoi correspond ce champ. Le <code>placeholder<\/code> dispara\u00eet d\u00e8s que l&rsquo;utilisateur commence \u00e0 saisir du texte, et son support par les lecteurs d&rsquo;\u00e9cran est in\u00e9gal. Une personne qui perd le fil (interruption, trouble de la m\u00e9moire de travail) ne sait plus ce qui \u00e9tait demand\u00e9.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code><strong><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-luminous-vivid-amber-color\">&lt;label for=\"nom\"&gt;Nom complet&lt;\/label&gt;<\/mark><\/strong>\n&lt;input type=\"text\" id=\"nom\" <strong><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-luminous-vivid-amber-color\">placeholder=\"Jean Dupont\"<\/mark><\/strong>&gt;<\/code><\/pre>\n\n\n\n<p class=\"ice-block is-green wp-block-paragraph\"><strong>\u00c0 retenir : le <code>placeholder<\/code> est un compl\u00e9ment (un exemple de format), jamais un substitut au <code>&lt;label&gt;<\/code>.<\/strong><\/p>\n\n\n\n<h2 class=\"wp-block-heading\">5 : Multiplier les intitul\u00e9s qui se contredisent<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Un pi\u00e8ge classique : empiler <code>&lt;label&gt;<\/code>, <code>aria-label<\/code> et <code>aria-labelledby<\/code> sur un m\u00eame champ, en esp\u00e9rant que cela soit d&rsquo;avantage accessible.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&lt;label for=\"tel\"&gt;<strong><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-luminous-vivid-amber-color\">T\u00e9l\u00e9phone<\/mark><\/strong>&lt;\/label&gt;\n&lt;input type=\"tel\" id=\"tel\" <strong><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-luminous-vivid-amber-color\">aria-label=\"Num\u00e9ro de portable\"<\/mark><\/strong>&gt;<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Quand plusieurs sources de nommage coexistent, l&rsquo;ordre de priorit\u00e9 du navigateur peut ignorer le <code>&lt;label&gt;<\/code> visible au profit de l&rsquo;<code>aria-label<\/code>, cr\u00e9ant un d\u00e9calage entre ce que voit une personne voyante et ce qu&rsquo;entend une personne aveugle.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Cela peut \u00e9galement cr\u00e9er des probl\u00e9matiques pour les reconnaissances vocales qui cibleront aussi l&rsquo;<code>aria-label<\/code> et non l&rsquo;intitul\u00e9 visible. <\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&lt;label for=\"tel\"&gt;T\u00e9l\u00e9phone&lt;\/label&gt;\n&lt;input type=\"tel\" id=\"tel\"&gt;<\/code><\/pre>\n\n\n\n<div class=\"wp-block-group\"><div class=\"wp-block-group__inner-container is-layout-constrained wp-block-group-is-layout-constrained\">\n<p class=\"ice-block is-green wp-block-paragraph\"><strong>\u00c0 retenir : un seul m\u00e9canisme de nommage \u00e0 la fois, sauf besoin r\u00e9ellement justifi\u00e9.<\/strong><\/p>\n\n\n\n<h2 class=\"wp-block-heading\">6 : Ne pas distinguer label visible et label accessible<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Un champ de recherche ne poss\u00e8de parfois aucun texte, seulement une ic\u00f4ne. Dans cet exemple l&rsquo;ic\u00f4ne n&rsquo;est qu&rsquo;une image de fond CSS, invisible pour les technologies d&rsquo;assistance.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"592\" height=\"119\" src=\"https:\/\/ideance.net\/blog\/wp-content\/uploads\/2026\/07\/champ1.jpg\" alt=\"\" class=\"wp-image-5622\" srcset=\"https:\/\/ideance.net\/blog\/wp-content\/uploads\/2026\/07\/champ1.jpg 592w, https:\/\/ideance.net\/blog\/wp-content\/uploads\/2026\/07\/champ1-300x60.jpg 300w, https:\/\/ideance.net\/blog\/wp-content\/uploads\/2026\/07\/champ1-18x4.jpg 18w\" sizes=\"auto, (max-width: 592px) 100vw, 592px\" \/><\/figure>\n<\/div>\n\n\n<pre class=\"wp-block-code\"><code>&lt;input type=\"search\" class=\"champ-recherche\"&gt;<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>.champ-recherche {\n  background: url(\"loupe.svg\");\n}<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Pour y rem\u00e9dier, une solution consiste \u00e0 masquer un <code>&lt;label&gt;<\/code> gr\u00e2ce \u00e0 CSS.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Attention cependant, n&rsquo;utilisez pas <code>display:none<\/code> ou <code>visibility:hidden<\/code> pour \u00ab faire dispara\u00eetre \u00bb le texte car ces propri\u00e9t\u00e9s CSS retirent aussi l&rsquo;\u00e9l\u00e9ment de l&rsquo;arbre d&rsquo;accessibilit\u00e9. Le label dispara\u00eet donc pour tout le monde, y compris pour le lecteur d&rsquo;\u00e9cran.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u00c0 la place, utiliser une classe CSS qui permet la restitution uniquement \u00e0 certaines technologies d\u2019assistance (dont les lecteurs d\u2019\u00e9cran) :<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>.<strong><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-luminous-vivid-amber-color\">visually-hidden<\/mark><\/strong> {\n\tposition: absolute;\n\twidth: 1px;\n\theight: 1px;\n\tpadding: 0;\n\tmargin: -1px;\n\toverflow: hidden;\n\tclip: rect(0, 0, 0, 0);\n\twhite-space: nowrap;\n\tborder-width: 0;\n}<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Cette technique masque le texte visuellement tout en le laissant accessible aux technologies d&rsquo;assistance.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code><strong><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-luminous-vivid-amber-color\">&lt;label for=\"recherche\" class=\"visually-hidden\"&gt;Rechercher sur le site&lt;\/label&gt;<\/mark><\/strong>\n&lt;input type=\"search\" class=\"champ-recherche\"&gt;<\/code><\/pre>\n<\/div><\/div>\n\n\n\n<p class=\"ice-block is-green wp-block-paragraph\"><strong>\u00c0 retenir : un champ dont le seul rep\u00e8re visuel est une ic\u00f4ne a quand m\u00eame besoin d&rsquo;un label accessible, masqu\u00e9 avec une technique adapt\u00e9e.<\/strong><\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Conclusion : comment bien utiliser le <code>&lt;label&gt;<\/code> ?<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Comme souvent en accessibilit\u00e9, la r\u00e8gle est \u00ab simple \u00bb mais demande de la rigueur.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Priorit\u00e9s \u00e0 respecter :<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Associer un <code>&lt;label&gt;<\/code> \u00e0 chaque champ de formulaire.<\/li>\n\n\n\n<li>V\u00e9rifier que <code>for<\/code> et <code>id<\/code> correspondent bien.<\/li>\n\n\n\n<li>Garder les intitul\u00e9s compr\u00e9hensibles hors contexte.<\/li>\n\n\n\n<li>Masquer un label visuellement sans le retirer de l&rsquo;arbre d&rsquo;accessibilit\u00e9.<\/li>\n\n\n\n<li>\u00c9viter les m\u00e9canismes de nommage multiples et contradictoires.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Et surtout : penser \u00e0 l&rsquo;utilisateur final.<\/p>","protected":false},"excerpt":{"rendered":"<p>La balise label permet d\u2019\u00e9tiqueter des champs de formulaire. Elle est essentielle pour les personnes aveugles ou fortement malvoyantes qui utilisent un lecteur d&rsquo;\u00e9cran, mais aussi pour les personnes ayant des troubles moteurs (elle agrandit la zone cliquable du champ).<\/p>","protected":false},"author":6,"featured_media":5444,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[22],"tags":[],"class_list":["post-5412","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-html-css-et-javascript"],"acf":[],"_links":{"self":[{"href":"https:\/\/ideance.net\/blog\/en\/wp-json\/wp\/v2\/posts\/5412","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/ideance.net\/blog\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/ideance.net\/blog\/en\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/ideance.net\/blog\/en\/wp-json\/wp\/v2\/users\/6"}],"replies":[{"embeddable":true,"href":"https:\/\/ideance.net\/blog\/en\/wp-json\/wp\/v2\/comments?post=5412"}],"version-history":[{"count":64,"href":"https:\/\/ideance.net\/blog\/en\/wp-json\/wp\/v2\/posts\/5412\/revisions"}],"predecessor-version":[{"id":5652,"href":"https:\/\/ideance.net\/blog\/en\/wp-json\/wp\/v2\/posts\/5412\/revisions\/5652"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/ideance.net\/blog\/en\/wp-json\/wp\/v2\/media\/5444"}],"wp:attachment":[{"href":"https:\/\/ideance.net\/blog\/en\/wp-json\/wp\/v2\/media?parent=5412"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/ideance.net\/blog\/en\/wp-json\/wp\/v2\/categories?post=5412"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/ideance.net\/blog\/en\/wp-json\/wp\/v2\/tags?post=5412"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}