{"id":1747,"date":"2024-01-11T17:00:24","date_gmt":"2024-01-11T16:00:24","guid":{"rendered":"https:\/\/ideance.net\/blog\/?p=1747"},"modified":"2024-01-15T21:40:40","modified_gmt":"2024-01-15T20:40:40","slug":"semantique-lien-bouton","status":"publish","type":"post","link":"https:\/\/ideance.net\/blog\/1747\/semantique-lien-bouton\/","title":{"rendered":"Dissocier la forme de la s\u00e9mantique\u00a0: lien vs. bouton"},"content":{"rendered":"\r\n<p>Un probl\u00e8me d\u2019accessibilit\u00e9 que l\u2019on rencontre sur de nombreux sites est la confusion dans l\u2019utilisation entre lien et bouton.<\/p>\r\n\r\n\r\n\r\n<p>Cette confusion peut principalement venir du fait que l\u2019aspect visuel, seul, ne permet pas de d\u00e9terminer s\u2019il s\u2019agit de l\u2019un ou l\u2019autre de ces composants interactifs. Par exemple, d\u2019apr\u00e8s vous, le composant ci-dessous est-il un lien ou un bouton&nbsp;?<\/p>\r\n\r\n\r\n<div class=\"wp-block-image with-dark-border\">\r\n<figure class=\"aligncenter size-medium\"><img loading=\"lazy\" decoding=\"async\" width=\"387\" height=\"76\" class=\"wp-image-1749\" style=\"width: 316px; height: auto;\" src=\"https:\/\/ideance.net\/blog\/wp-content\/uploads\/2023\/12\/Screenshot-2023-12-21-at-15-43-50-Ideance-Conseil-formation-audit-et-expertise-accessibilite-en-numerique.png\" alt=\"Visuel d\u2019un \u00e9l\u00e9ment rectangulaire, aux bords arrondis et sur fond de couleur. \u00c0 l\u2019int\u00e9rieur de cet \u00e9l\u00e9ment est \u00e9crit \u00ab\u00a0Toute notre expertise\u00a0\u00bb.\" srcset=\"https:\/\/ideance.net\/blog\/wp-content\/uploads\/2023\/12\/Screenshot-2023-12-21-at-15-43-50-Ideance-Conseil-formation-audit-et-expertise-accessibilite-en-numerique.png 387w, https:\/\/ideance.net\/blog\/wp-content\/uploads\/2023\/12\/Screenshot-2023-12-21-at-15-43-50-Ideance-Conseil-formation-audit-et-expertise-accessibilite-en-numerique-300x59.png 300w, https:\/\/ideance.net\/blog\/wp-content\/uploads\/2023\/12\/Screenshot-2023-12-21-at-15-43-50-Ideance-Conseil-formation-audit-et-expertise-accessibilite-en-numerique-18x4.png 18w\" sizes=\"auto, (max-width: 387px) 100vw, 387px\" \/><\/figure>\r\n<\/div>\r\n\r\n\r\n<p>M\u00eame question pour ce composant interactif \u00ab&nbsp;Lire la transcription textuelle de la vid\u00e9o&nbsp;\u00bb&nbsp;?<\/p>\r\n\r\n\r\n<div class=\"wp-block-image with-dark-border\">\r\n<figure class=\"aligncenter size-medium\"><img loading=\"lazy\" decoding=\"async\" width=\"362\" height=\"38\" class=\"wp-image-1750\" style=\"width: 343px; height: auto;\" src=\"https:\/\/ideance.net\/blog\/wp-content\/uploads\/2023\/12\/Screenshot-2023-12-21-at-15-45-38-Vaccination-contre-la-grippe-saisonniere-en-pratique.png\" alt=\"Visuel d\u2019un texte \u00ab\u00a0Lire la transcription textuelle de la vid\u00e9o\u00a0\u00bb. Ce texte est \u00e9crit en bleu et soulign\u00e9. Il est pr\u00e9c\u00e9d\u00e9 d\u2019une ic\u00f4ne repr\u00e9sentant un oeil barr\u00e9.\" srcset=\"https:\/\/ideance.net\/blog\/wp-content\/uploads\/2023\/12\/Screenshot-2023-12-21-at-15-45-38-Vaccination-contre-la-grippe-saisonniere-en-pratique.png 362w, https:\/\/ideance.net\/blog\/wp-content\/uploads\/2023\/12\/Screenshot-2023-12-21-at-15-45-38-Vaccination-contre-la-grippe-saisonniere-en-pratique-300x31.png 300w, https:\/\/ideance.net\/blog\/wp-content\/uploads\/2023\/12\/Screenshot-2023-12-21-at-15-45-38-Vaccination-contre-la-grippe-saisonniere-en-pratique-18x2.png 18w\" sizes=\"auto, (max-width: 362px) 100vw, 362px\" \/><\/figure>\r\n<\/div>\r\n\r\n\r\n<p>Pour pouvoir r\u00e9pondre correctement \u00e0 ces questions et faire le bon choix lors du d\u00e9veloppement de ces \u00e9l\u00e9ments, ce qu\u2019il nous manque, c\u2019est la fonction de ces \u00e9l\u00e9ments interactifs.<\/p>\r\n\r\n\r\n\r\n<p>Les interactions attendues entre un lien et un bouton sont diff\u00e9rentes.<\/p>\r\n\r\n\r\n\r\n<p>Leurs mauvais d\u00e9veloppements g\u00e9n\u00e8rent un impact direct pour les personnes naviguant avec une technologie d\u2019assistance, comme un lecteur d\u2019\u00e9cran (synth\u00e8se vocale et\/ou plage braille).<\/p>\r\n\r\n\r\n\r\n<h2 class=\"wp-block-heading\">La s\u00e9mantique en HTML, qu&rsquo;est-ce que c&rsquo;est&nbsp;?<\/h2>\r\n\r\n\r\n\r\n<p>Avant d\u2019aller plus loin et pour une meilleure compr\u00e9hension de la suite de l\u2019article, il me para\u00eet important de r\u00e9capituler bri\u00e8vement ce qu\u2019est la s\u00e9mantique des balises HTML.<\/p>\r\n\r\n\r\n\r\n<p>Une balise HTML s\u00e9mantique est une balise permettant de donner un r\u00f4le \/ du sens aux contenus qu\u2019elle structure.<\/p>\r\n\r\n\r\n\r\n<p>Cette s\u00e9mantique est notamment utilis\u00e9e par les outils d\u2019assistance, comme les lecteurs d\u2019\u00e9cran, pour d\u00e9crire correctement les composants.<\/p>\r\n\r\n\r\n\r\n<p>Par exemple, une balise <code>&lt;nav&gt;<\/code> donne \u00e0 la liste de liens qu&rsquo;elle structure le role de navigation.<\/p>\r\n\r\n\r\n\r\n<p>Une balise <code>&lt;h1&gt;<\/code>, quand \u00e0 elle, donnera au texte qu&rsquo;elle structure le role de titre de premier niveau.<\/p>\r\n\r\n\r\n\r\n<p class=\"ice-block\">On utilise donc une balise HTML pour sa s\u00e9mantique et non pour sa forme (le CSS servira \u00e0 donner la forme que l\u2019on veut donner au composant).<\/p>\r\n\r\n\r\n\r\n<p>Dans le cas des liens et des boutons, afin de choisir la balise la plus appropri\u00e9e, il faut donc au pr\u00e9alable conna\u00eetre la fonction du composant et non se fier \u00e0 sa forme.<\/p>\r\n\r\n\r\n\r\n<h2 class=\"wp-block-heading\">Comment choisir entre un lien et un bouton&nbsp;?<\/h2>\r\n\r\n\r\n\r\n<p class=\"ice-block\">La question la plus importante est\u00a0: \u00ab\u00a0Que se passe-t-il lorsque la personne active ce composant&nbsp;?\u00a0\u00bb.<\/p>\r\n\r\n\r\n\r\n<h3 class=\"wp-block-heading\">Le composant est-il utilis\u00e9 pour naviguer vers une ressource&nbsp;? Si oui, c\u2019est un lien\u00a0!<\/h3>\r\n\r\n\r\n\r\n<p>Si, \u00e0 l\u2019activation du composant, la personne est men\u00e9e sur une autre page du site, un autre endroit sur la page, un autre site ou encore un document (tel qu\u2019un fichier PDF) alors structurer ce composant avec une balise <code>&lt;a href=\"[URL]\"&gt;<\/code>.<\/p>\r\n\r\n\r\n\r\n<h4 class=\"wp-block-heading\">Dans l\u2019exemple en introduction\u00a0:<\/h4>\r\n\r\n\r\n<div class=\"wp-block-image with-dark-border\">\r\n<figure class=\"aligncenter size-medium\"><img loading=\"lazy\" decoding=\"async\" width=\"387\" height=\"76\" class=\"wp-image-1749\" style=\"width: 316px; height: auto;\" src=\"https:\/\/ideance.net\/blog\/wp-content\/uploads\/2023\/12\/Screenshot-2023-12-21-at-15-43-50-Ideance-Conseil-formation-audit-et-expertise-accessibilite-en-numerique.png\" alt=\"Visuel d\u2019un \u00e9l\u00e9ment rectangulaire, aux bords arrondis et sur fond de couleur. \u00c0 l\u2019int\u00e9rieur de cet \u00e9l\u00e9ment est \u00e9crit \u00ab\u00a0Toute notre expertise\u00a0\u00bb.\" srcset=\"https:\/\/ideance.net\/blog\/wp-content\/uploads\/2023\/12\/Screenshot-2023-12-21-at-15-43-50-Ideance-Conseil-formation-audit-et-expertise-accessibilite-en-numerique.png 387w, https:\/\/ideance.net\/blog\/wp-content\/uploads\/2023\/12\/Screenshot-2023-12-21-at-15-43-50-Ideance-Conseil-formation-audit-et-expertise-accessibilite-en-numerique-300x59.png 300w, https:\/\/ideance.net\/blog\/wp-content\/uploads\/2023\/12\/Screenshot-2023-12-21-at-15-43-50-Ideance-Conseil-formation-audit-et-expertise-accessibilite-en-numerique-18x4.png 18w\" sizes=\"auto, (max-width: 387px) 100vw, 387px\" \/><\/figure>\r\n<\/div>\r\n\r\n\r\n<p>Ce composant interactif (pr\u00e9sent sur <a href=\"https:\/\/ideance.net\/fr\/\">la page d\u2019accueil du site Ideance<\/a>) m\u00e8ne sur une autre page du site.<\/p>\r\n\r\n\r\n\r\n<p>Il s\u2019agit donc d\u2019un lien.<\/p>\r\n\r\n\r\n\r\n<h3 class=\"wp-block-heading\">Le composant d\u00e9clenche-t-il une action ou un \u00e9v\u00e8nement&nbsp;? Si oui, c\u2019est un bouton\u00a0!<\/h3>\r\n\r\n\r\n\r\n<h4 class=\"wp-block-heading\">Le bouton contr\u00f4le-t-il la soumission d\u2019un formulaire&nbsp;?<\/h4>\r\n\r\n\r\n\r\n<p>Un bouton de soumission de formulaire doit \u00eatre structur\u00e9 avec une balise <code>&lt;button&gt;<\/code> ou <code>&lt;input&gt;<\/code> et utiliser l\u2019attribut <code>type=\"submit\"<\/code>.<\/p>\r\n\r\n\r\n\r\n<p>Pour obtenir par exemple concr\u00e8tement\u00a0:<\/p>\r\n\r\n\r\n\r\n<pre class=\"wp-block-code\"><code>&lt;button type=\"submit\"&gt;Envoyer mon message&lt;\/button&gt;<\/code><\/pre>\r\n\r\n\r\n\r\n<h4 class=\"wp-block-heading\">Le bouton permet-il d\u2019actionner un script&nbsp;?<\/h4>\r\n\r\n\r\n\r\n<p>Un bouton activant un script doit \u00eatre structur\u00e9 avec une balise <code>&lt;button&gt;<\/code> ou <code>&lt;input&gt;<\/code> et utiliser l\u2019attribut <code>type=\"button\"<\/code>.<\/p>\r\n\r\n\r\n\r\n<h5 class=\"wp-block-heading\">Dans l\u2019exemple en introduction\u00a0:<\/h5>\r\n\r\n\r\n<div class=\"wp-block-image with-dark-border\">\r\n<figure class=\"aligncenter size-medium\"><img loading=\"lazy\" decoding=\"async\" width=\"362\" height=\"38\" class=\"wp-image-1750\" src=\"https:\/\/ideance.net\/blog\/wp-content\/uploads\/2023\/12\/Screenshot-2023-12-21-at-15-45-38-Vaccination-contre-la-grippe-saisonniere-en-pratique.png\" alt=\"Visuel d\u2019un texte \u00ab\u00a0Lire la transcription textuelle de la vid\u00e9o\u00a0\u00bb. Ce texte est \u00e9crit en bleu et soulign\u00e9. Il est pr\u00e9c\u00e9d\u00e9 d\u2019une ic\u00f4ne repr\u00e9sentant un oeil barr\u00e9.\" srcset=\"https:\/\/ideance.net\/blog\/wp-content\/uploads\/2023\/12\/Screenshot-2023-12-21-at-15-45-38-Vaccination-contre-la-grippe-saisonniere-en-pratique.png 362w, https:\/\/ideance.net\/blog\/wp-content\/uploads\/2023\/12\/Screenshot-2023-12-21-at-15-45-38-Vaccination-contre-la-grippe-saisonniere-en-pratique-300x31.png 300w, https:\/\/ideance.net\/blog\/wp-content\/uploads\/2023\/12\/Screenshot-2023-12-21-at-15-45-38-Vaccination-contre-la-grippe-saisonniere-en-pratique-18x2.png 18w\" sizes=\"auto, (max-width: 362px) 100vw, 362px\" \/><\/figure>\r\n<\/div>\r\n\r\n\r\n<p>Ce composant interactif (pr\u00e9sent sur <a href=\"https:\/\/www.ameli.fr\/assure\/droits-demarches\/principes\/numero-securite-sociale\">le site Ameli.fr<\/a>) permet de faire appara\u00eetre la transcription textuelle d\u2019une vid\u00e9o via un syst\u00e8me de d\u00e9plier\/plier.<\/p>\r\n\r\n\r\n\r\n<p>Ce qui donne concr\u00e8tement\u00a0:<\/p>\r\n\r\n\r\n\r\n<pre class=\"wp-block-code\"><code>&lt;button type=\"button\" aria-expanded=\"false\"&gt;Lire la transcription textuelle de la vid\u00e9o&lt;\/button&gt;<\/code><\/pre>\r\n\r\n\r\n\r\n<h4 class=\"wp-block-heading\"><code>&lt;div&gt;<\/code> et <code>&lt;span&gt;<\/code> ne sont pas des boutons\u00a0!<\/h4>\r\n\r\n\r\n\r\n<p>Bien qu\u2019il soit possible de faire d\u2019un \u00e9l\u00e9ment non interactif (<code>&lt;div&gt;<\/code> ou <code>&lt;span&gt;<\/code>) un bouton via l\u2019utilisation de ARIA (et l\u2019attribut <code>role=\"button\"<\/code>) nous ne recommandons pas d\u2019utiliser cette m\u00e9thode.<\/p>\r\n\r\n\r\n\r\n<p>Ces boutons reconstruits en ARIA sont souvent sujets \u00e0 plusieurs probl\u00e8mes d\u2019accessibilit\u00e9 pouvant g\u00eaner ou entraver leur utilisation entre autres avec un lecteur d\u2019\u00e9cran et au clavier.<\/p>\r\n\r\n\r\n\r\n<p>Julie Moynat explique tr\u00e8s bien les limites de l\u2019utilisation de ces boutons ARIA dans son article <a href=\"https:\/\/www.lalutineduweb.fr\/boutons-accessibles-html\/\">Cr\u00e9er des boutons accessibles et dignes de ce nom en HTML<\/a>.<\/p>\r\n\r\n\r\n\r\n<h4 class=\"wp-block-heading\">Et qu&rsquo;en est-il de <code>&lt;a role=\"button\"&gt;<\/code>&nbsp;?<\/h4>\r\n\r\n\r\n\r\n<p>Comme vu juste au-dessus, nous d\u00e9conseillons l\u2019utilisation de l\u2019attribut <code>role=\"button\"<\/code>.<\/p>\r\n\r\n\r\n\r\n<p>M\u00eame si contrairement \u00e0 l\u2019exemple pr\u00e9c\u00e9dent, la balise <code>&lt;a&gt;<\/code> est un \u00e9l\u00e9ment interactif, les interactions clavier ne sont pas les m\u00eames entre un lien et un bouton (et m\u00eame avec du JavaScript, il pourrait s\u2019av\u00e9rer tr\u00e8s complexe de reproduire \u00e0 l\u2019identique toutes les interactions d\u2019une v\u00e9ritable balise <code>&lt;button&gt;<\/code>).<\/p>\r\n\r\n\r\n\r\n<h2 class=\"wp-block-heading\">Conclusion<\/h2>\r\n\r\n\r\n\r\n<p>Comme dit l\u2019adage, l\u2019habit ne fait pas le moine.<\/p>\r\n\r\n\r\n\r\n<p>Pour bien choisir entre le d\u00e9veloppement d\u2019un lien ou d\u2019un bouton, ne vous fiez pas \u00e0 son visuel mais demandez-vous plut\u00f4t quelle est l\u2019interaction attendue de ce composant.<\/p>\r\n\r\n\r\n\r\n<p>Et si possible, de mani\u00e8re plus g\u00e9n\u00e9rale, privil\u00e9giez un maximum l\u2019utilisation des balises HTML natives\u00a0\ud83d\ude09.<\/p>\r\n\r\n\r\n\r\n<h2 class=\"wp-block-heading\">Ressources<\/h2>\r\n\r\n\r\n\r\n<ul class=\"wp-block-list\">\r\n<li><a lang=\"en\" href=\"https:\/\/css-tricks.com\/a-complete-guide-to-links-and-buttons\/\" hreflang=\"en\">A Complete Guide to Links and Buttons<\/a><\/li>\r\n\r\n\r\n\r\n<li><a href=\"https:\/\/www.lalutineduweb.fr\/boutons-accessibles-html\/\">Cr\u00e9er des boutons accessibles et dignes de ce nom en HTML<\/a><\/li>\r\n\r\n\r\n\r\n<li><a lang=\"en\" href=\"https:\/\/adrianroselli.com\/2016\/01\/links-buttons-submits-and-divs-oh-hell.html\" hreflang=\"en\">Links, Buttons, Submits, and Divs, Oh Hell<\/a><\/li>\r\n\r\n\r\n\r\n<li><a lang=\"en\" href=\"https:\/\/karlgroves.com\/links-are-not-buttons-neither-are-divs-and-spans\/\" hreflang=\"en\">Links are not buttons. Neither are DIVs and SPANs<\/a><\/li>\r\n\r\n\r\n\r\n<li><a lang=\"en\" href=\"https:\/\/www.smashingmagazine.com\/2019\/02\/buttons-interfaces\/\" hreflang=\"en\">When Is A Button Not A Button?<\/a><\/li>\r\n<\/ul>\r\n","protected":false},"excerpt":{"rendered":"<p>Un probl\u00e8me d\u2019accessibilit\u00e9 que l\u2019on rencontre sur de nombreux sites est la confusion dans l\u2019utilisation entre lien et bouton. Cette confusion peut principalement venir du fait que l\u2019aspect visuel, seul, ne permet pas de d\u00e9terminer s\u2019il s\u2019agit de l\u2019un ou l\u2019autre de ces composants interactifs. Par exemple, d\u2019apr\u00e8s vous, le composant ci-dessous est-il un lien&hellip;<\/p>\n","protected":false},"author":8,"featured_media":1769,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[22],"tags":[],"class_list":["post-1747","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-html-css-et-javascript"],"acf":[],"_links":{"self":[{"href":"https:\/\/ideance.net\/blog\/wp-json\/wp\/v2\/posts\/1747","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/ideance.net\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/ideance.net\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/ideance.net\/blog\/wp-json\/wp\/v2\/users\/8"}],"replies":[{"embeddable":true,"href":"https:\/\/ideance.net\/blog\/wp-json\/wp\/v2\/comments?post=1747"}],"version-history":[{"count":15,"href":"https:\/\/ideance.net\/blog\/wp-json\/wp\/v2\/posts\/1747\/revisions"}],"predecessor-version":[{"id":1795,"href":"https:\/\/ideance.net\/blog\/wp-json\/wp\/v2\/posts\/1747\/revisions\/1795"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/ideance.net\/blog\/wp-json\/wp\/v2\/media\/1769"}],"wp:attachment":[{"href":"https:\/\/ideance.net\/blog\/wp-json\/wp\/v2\/media?parent=1747"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/ideance.net\/blog\/wp-json\/wp\/v2\/categories?post=1747"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/ideance.net\/blog\/wp-json\/wp\/v2\/tags?post=1747"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}