{"id":3025,"date":"2025-02-13T12:44:08","date_gmt":"2025-02-13T11:44:08","guid":{"rendered":"https:\/\/ideance.net\/blog\/?p=3025"},"modified":"2025-07-31T11:37:56","modified_gmt":"2025-07-31T09:37:56","slug":"creer-un-bouton-menu-hamburger-accessible","status":"publish","type":"post","link":"https:\/\/ideance.net\/blog\/en\/3025\/creer-un-bouton-menu-hamburger-accessible\/","title":{"rendered":"Cr\u00e9er un bouton burger accessible"},"content":{"rendered":"<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"284\" class=\"wp-image-3147 aligncenter\" src=\"https:\/\/ideance.net\/blog\/wp-content\/uploads\/2024\/09\/trtreter-1024x284.png\" alt=\"\" srcset=\"https:\/\/ideance.net\/blog\/wp-content\/uploads\/2024\/09\/trtreter-1024x284.png 1024w, https:\/\/ideance.net\/blog\/wp-content\/uploads\/2024\/09\/trtreter-300x83.png 300w, https:\/\/ideance.net\/blog\/wp-content\/uploads\/2024\/09\/trtreter-768x213.png 768w, https:\/\/ideance.net\/blog\/wp-content\/uploads\/2024\/09\/trtreter-1536x426.png 1536w, https:\/\/ideance.net\/blog\/wp-content\/uploads\/2024\/09\/trtreter-2048x568.png 2048w, https:\/\/ideance.net\/blog\/wp-content\/uploads\/2024\/09\/trtreter-18x5.png 18w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Les boutons de type burger sont couramment utilis\u00e9s sur mobile pour ouvrir et fermer un menu de navigation principale.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Dans cet article, nous explorerons comment cr\u00e9er un tel bouton de mani\u00e8re accessible.<\/p>\n\n\n\n<p class=\"ice-block wp-block-paragraph\">Un article connexe explique \u00e9galement comment <a href=\"https:\/\/ideance.net\/blog\/en\/2680\/creer-un-menu-de-navigation-accessible\/\">cr\u00e9er un menu de navigation accessible<\/a>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">La structure du bouton burger<\/h2>\n\n\n\n<figure class=\"wp-block-image size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"150\" height=\"149\" class=\"wp-image-3090 aligncenter\" style=\"width: 150px;\" src=\"https:\/\/ideance.net\/blog\/wp-content\/uploads\/2024\/09\/4886-2.jpg\" alt=\"\" srcset=\"https:\/\/ideance.net\/blog\/wp-content\/uploads\/2024\/09\/4886-2.jpg 197w, https:\/\/ideance.net\/blog\/wp-content\/uploads\/2024\/09\/4886-2-150x150.jpg 150w, https:\/\/ideance.net\/blog\/wp-content\/uploads\/2024\/09\/4886-2-12x12.jpg 12w\" sizes=\"auto, (max-width: 150px) 100vw, 150px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Le bouton burger est impl\u00e9ment\u00e9 avec la balise <code>&lt;button type=\"button\"><\/code> car <strong>il d\u00e9clenche une action.<\/strong> Il ouvre la navigation principale.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Il est g\u00e9n\u00e9ralement repr\u00e9sent\u00e9 par une ic\u00f4ne de trois barres horizontales et permet d&rsquo;acc\u00e9der \u00e0 la navigation principale.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Cette ic\u00f4ne peut \u00eatre, par exemple, int\u00e9gr\u00e9e en utilisant <code>&lt;img&gt;<\/code>, <code>&lt;svg&gt;<\/code> ou en CSS.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Pour garantir l&rsquo;accessibilit\u00e9, le bouton doit <strong>avoir un intitul\u00e9<\/strong> accessible.<br>Dans cet exemple, imaginons que ce bouton affiche une image repr\u00e9sentant les trois barres horizontales via la balise <code>&lt;img&gt;<\/code>. Nous ajoutons alors une alternative textuelle \u00e0 l&rsquo;image, par exemple : <code>alt=\"Menu\"<\/code>.<br>Ainsi, ce bouton b\u00e9n\u00e9ficie d\u00e9sormais d&rsquo;un intitul\u00e9 accessible gr\u00e2ce \u00e0 l&rsquo;alternative textuelle de l&rsquo;image.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">D&rsquo;autres options consistent \u00e0 ajouter un texte visuellement cach\u00e9 \u00e0 l&rsquo;aide d&rsquo;une classe comme <code><a href=\"https:\/\/www.tpgi.com\/the-anatomy-of-visually-hidden\/\">visually-hidden<\/a><\/code>, ou encore \u00e0 utiliser l&rsquo;attribut <code>aria-label<\/code>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Pour permettre aux personnes utilisant des technologies d\u2019assistance (tel qu\u2019un lecteur d\u2019\u00e9cran), d\u2019acc\u00e9der rapidement au menu en ciblant les zones de \u00ab navigation \u00bb, le bouton burger doit \u00eatre encapsul\u00e9 dans une balise <code>&lt;nav role=\"navigation\" aria-label=\"Menu principal\"><\/code>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Pour obtenir par exemple :<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&lt;nav role=&quot;navigation&quot; aria-label=&quot;Menu principal&quot;&gt;\n  &lt;button type=&quot;button&quot;&gt;\n    &lt;img src=&quot;...\/burger.jpg&quot; alt=&quot;Menu&quot;&gt;\n  &lt;\/button&gt;\n&lt;\/nav&gt;<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Il existe deux types de fonctionnalit\u00e9s pour ces boutons :<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Ceux qui d\u00e9plient\/replient un panneau de contenus,<\/li>\n\n\n\n<li>Ceux qui ouvrent\/ferment une modale.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Boutons burger d\u00e9pliant\/repliant le menu<\/h3>\n\n\n\n<figure class=\"wp-block-image size-large is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"500\" height=\"500\" class=\"wp-image-3098 aligncenter\" style=\"width: 500px;\" src=\"https:\/\/ideance.net\/blog\/wp-content\/uploads\/2024\/09\/blank_smartphone_mockup_isolate_on_background-copie-1024x1024.png\" alt=\"\" srcset=\"https:\/\/ideance.net\/blog\/wp-content\/uploads\/2024\/09\/blank_smartphone_mockup_isolate_on_background-copie-1024x1024.png 1024w, https:\/\/ideance.net\/blog\/wp-content\/uploads\/2024\/09\/blank_smartphone_mockup_isolate_on_background-copie-300x300.png 300w, https:\/\/ideance.net\/blog\/wp-content\/uploads\/2024\/09\/blank_smartphone_mockup_isolate_on_background-copie-150x150.png 150w, https:\/\/ideance.net\/blog\/wp-content\/uploads\/2024\/09\/blank_smartphone_mockup_isolate_on_background-copie-768x768.png 768w, https:\/\/ideance.net\/blog\/wp-content\/uploads\/2024\/09\/blank_smartphone_mockup_isolate_on_background-copie-1536x1536.png 1536w, https:\/\/ideance.net\/blog\/wp-content\/uploads\/2024\/09\/blank_smartphone_mockup_isolate_on_background-copie-2048x2048.png 2048w, https:\/\/ideance.net\/blog\/wp-content\/uploads\/2024\/09\/blank_smartphone_mockup_isolate_on_background-copie-12x12.png 12w\" sizes=\"auto, (max-width: 500px) 100vw, 500px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Pour une navigation principale situ\u00e9e dans un panneau de contenus, <strong>ajoutez l&rsquo;attribut <code>aria-expanded<\/code><\/strong> a la structure de votre bouton burger.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Cet attribut permet d&rsquo;indiquer l&rsquo;\u00e9tat d&rsquo;ouverture\/fermeture du menu aux <a href=\"https:\/\/ideance.net\/blog\/en\/3306\/3306\/\">lecteurs d&rsquo;\u00e9cran<\/a>.<br>Cet attribut doit \u00eatre dynamique :<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><code>aria-expanded=\"false\"<\/code> lorsque le menu est masqu\u00e9,<\/li>\n\n\n\n<li><code>aria-expanded=\"true\"<\/code> lorsque le menu est affich\u00e9.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Lorsque la liste du menu est masqu\u00e9e, elle doit \u00eatre masqu\u00e9e visuellement et pour les <a href=\"https:\/\/ideance.net\/blog\/en\/fr\/glossaire-accessibilite\/#technologie-assistance\">technologies d&rsquo;assistance<\/a>. Pour masquer le liste du menu aux technologies d&rsquo;assistances, vous pouvez par exemple utiliser CSS avec la <strong>d\u00e9claration <code>display:none<\/code> <\/strong>ou<strong> <code>visibility:hidden<\/code><\/strong>.<br>Une autre solution consiste \u00e0<strong> <\/strong>utiliser <strong><code>aria-hidden=\"true\" <\/code><\/strong>et <code><strong>tabindex=\"-1\"<\/strong> <\/code>sur les \u00e9l\u00e9ments interactifs (boutons, liens, etc.)<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">La liste du menu doit \u00eatre plac\u00e9e juste apr\u00e8s le bouton burger dans le code source, afin d&rsquo;<strong>assurer un ordre logique<\/strong> lors de la navigation au clavier.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Le bouton d\u00e9clenchant l\u2019action de d\u00e9plier la liste du menu doit aussi permettre de replier le contenu.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Pour obtenir, par exemple, lorsque la navigation principale est repli\u00e9e :<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&lt;nav role=&quot;navigation&quot; aria-label=&quot;Menu principal&quot;&gt;\n  &lt;button type=&quot;button&quot; aria-expanded=&quot;false&quot;&gt;\n    &lt;img src=&quot;...\/burger.jpg&quot; alt=&quot;Menu&quot;&gt;\n  &lt;\/button&gt;\n  &lt;ul style=&quot;display:none&quot;&gt;[...]&lt;\/ul&gt;\n&lt;\/nav&gt;<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">Boutons burger ouvrant\/fermant une fen\u00eatre modale<\/h3>\n\n\n\n<figure class=\"wp-block-image size-large is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"500\" height=\"500\" class=\"wp-image-3100 aligncenter\" style=\"width: 500px;\" src=\"https:\/\/ideance.net\/blog\/wp-content\/uploads\/2024\/09\/blank_smartphone_mockup_isolate_on_background-copie-2-1024x1024.png\" alt=\"\" srcset=\"https:\/\/ideance.net\/blog\/wp-content\/uploads\/2024\/09\/blank_smartphone_mockup_isolate_on_background-copie-2-1024x1024.png 1024w, https:\/\/ideance.net\/blog\/wp-content\/uploads\/2024\/09\/blank_smartphone_mockup_isolate_on_background-copie-2-300x300.png 300w, https:\/\/ideance.net\/blog\/wp-content\/uploads\/2024\/09\/blank_smartphone_mockup_isolate_on_background-copie-2-150x150.png 150w, https:\/\/ideance.net\/blog\/wp-content\/uploads\/2024\/09\/blank_smartphone_mockup_isolate_on_background-copie-2-768x768.png 768w, https:\/\/ideance.net\/blog\/wp-content\/uploads\/2024\/09\/blank_smartphone_mockup_isolate_on_background-copie-2-1536x1536.png 1536w, https:\/\/ideance.net\/blog\/wp-content\/uploads\/2024\/09\/blank_smartphone_mockup_isolate_on_background-copie-2-2048x2048.png 2048w, https:\/\/ideance.net\/blog\/wp-content\/uploads\/2024\/09\/blank_smartphone_mockup_isolate_on_background-copie-2-12x12.png 12w\" sizes=\"auto, (max-width: 500px) 100vw, 500px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Pour une navigation principale situ\u00e9e dans une modale, <strong>ajoutez l&rsquo;attribut <code>aria-haspopup=\"dialog\"<\/code><\/strong> \u00e0 la structure de votre bouton burger.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Enveloppez la liste du menu dans une balise <code>&lt;div <strong>role=\"dialog\" aria-modal=\"true\"<\/strong>&gt;<\/code>.<\/p>\n\n\n\n<p><strong>Ajoutez <code>tabindex=\"-1\"<\/code><\/strong> \u00e0 la balise <code>&lt;div role=&quot;dialog&quot; aria-modal=&quot;true&quot;&gt;<\/code> pour d\u00e9placer le focus dans la modale. Assurez-vous que<strong> le focus reste \u00e0 l&rsquo;int\u00e9rieur de la modale<\/strong> et qu&rsquo;il est impossible de naviguer en arri\u00e8re-plan. Pour tester, utiliser la touche <kbd>TAB<\/kbd> de votre clavier.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Une autre possibilit\u00e9 est d\u2019envelopper la liste du menu dans une balise native <code>&lt;dialog&gt;<\/code>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Il est indispensable de<strong> permettre la fermeture de la fen\u00eatre modale<\/strong>. Pour cela, un bouton d\u00e9di\u00e9 avec un intitul\u00e9 accessible est n\u00e9cessaire. Si le bouton est repr\u00e9sent\u00e9 par une image, ajoutez par exemple une alternative \u00e0 l&rsquo;image pour d\u00e9crire son action.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Pour obtenir par exemple :<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&lt;nav role=&quot;navigation&quot; aria-label=&quot;Menu principal&quot;&gt;\n  &lt;button type=&quot;button&quot; aria-haspopup=&quot;dialog&quot;&gt;\n    &lt;img src=&quot;...\/burger.jpg&quot; alt=&quot;Menu&quot;&gt;\n  &lt;\/button&gt;\n&lt;\/nav&gt;\n&lt;div  role=&quot;dialog&quot; aria-modal=&quot;true&quot; tabindex=&quot;-1&quot;&gt;\n  &lt;button type=&quot;button&quot;&gt;\n    &lt;img src=&quot;...\/cross.jpg&quot; alt=&quot;Fermer le menu&quot;&gt;\n  &lt;\/button&gt;\n  &lt;ul&gt;[...]&lt;\/ul&gt;\n&lt;\/div&gt;<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">Interactions clavier<\/h2>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"1000\" height=\"196\" src=\"https:\/\/ideance.net\/blog\/wp-content\/uploads\/2024\/09\/Sans-titre-1.jpg\" alt=\"\" class=\"wp-image-3073\" srcset=\"https:\/\/ideance.net\/blog\/wp-content\/uploads\/2024\/09\/Sans-titre-1.jpg 1000w, https:\/\/ideance.net\/blog\/wp-content\/uploads\/2024\/09\/Sans-titre-1-300x59.jpg 300w, https:\/\/ideance.net\/blog\/wp-content\/uploads\/2024\/09\/Sans-titre-1-768x151.jpg 768w, https:\/\/ideance.net\/blog\/wp-content\/uploads\/2024\/09\/Sans-titre-1-18x4.jpg 18w\" sizes=\"auto, (max-width: 1000px) 100vw, 1000px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Le bouton burger doit pouvoir recevoir le focus de navigation, pour cela essayer de naviguer avec la touche <kbd>TAB<\/kbd>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Les touches <kbd>Espace<\/kbd> et <kbd>Entr\u00e9e <\/kbd>doivent enclencher les boutons.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Il est recommand\u00e9 :<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>De permettre \u00e0 la touche <kbd>\u00c9chap (Escape)<\/kbd> de fermer le menu et de ramener le focus sur le bouton qui a d\u00e9clench\u00e9 l&rsquo;action initiale,<\/li>\n\n\n\n<li>De fermer automatiquement le menu lorsque le focus quitte la zone de navigation pour les sous-menus impl\u00e9menter avec un panneau d\u00e9plier\/plier.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Tous les \u00e9l\u00e9ments interactifs dans la navigation principale, tels que les boutons et liens par exemple, doivent recevoir le focus de navigation lorsque le menu est ouvert. <\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Conclusion<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Pour concevoir un bouton de menu burger accessible :<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Utiliser une balise <code>&lt;button type=\"button\"><\/code> pour structurer le bouton burger,<\/li>\n\n\n\n<li>Fournir un intitul\u00e9 accessible (visible ou cach\u00e9e) \u00e0 ce bouton burger,<\/li>\n\n\n\n<li>Ignorer les images d\u00e9coratives si elles sont pr\u00e9sentes,<\/li>\n\n\n\n<li>Savoir diff\u00e9rencier si le bouton d\u00e9plie\/replie un panneau de contenu ou s&rsquo;il ouvre une fen\u00eatre modale,<\/li>\n\n\n\n<li>V\u00e9rifier les interactions au clavier.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Si le bouton d\u00e9plie\/replie un panneau de contenu :<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Utiliser l&rsquo;attribut <code>aria-expanded<\/code> pour indiquer l&rsquo;\u00e9tat de la navigation principale (d\u00e9pli\u00e9e ou repli\u00e9e),<\/li>\n\n\n\n<li>Masquer la liste du menu tant que le bouton menu burger n&rsquo;a pas \u00e9t\u00e9 enclench\u00e9,<\/li>\n\n\n\n<li>Assurez-vous que l&rsquo;ordre de tabulation est logique.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Si le bouton ouvre une fen\u00eatre modale :<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Ajouter l&rsquo;attribut <code>aria-haspopup=\"dialog\"<\/code> \u00e0 votre bouton burger,<\/li>\n\n\n\n<li>Structurer la liste du menu dans une fen\u00eatre modale avec les attributs <code>role=\"dialog\"<\/code> et <code>aria-modal=\"true\"<\/code> ou dans une balise &lt;dialog&gt;,<\/li>\n\n\n\n<li>Lorsque le bouton burger est activ\u00e9, la fen\u00eatre modale doit s\u2019ouvrir et le focus doit \u00eatre d\u00e9plac\u00e9 \u00e0 l\u2019int\u00e9rieur et y rester jusqu\u2019\u00e0 ce que la fen\u00eatre modale est ferm\u00e9e,<\/li>\n\n\n\n<li>Un bouton de fermeture doit \u00eatre propos\u00e9 au sein de cette fen\u00eatre modale.<\/li>\n<\/ul>\n\n\n\n<p class=\"ice-block is-green wp-block-paragraph\">Ces conseils peuvent guider la cr\u00e9ation d&rsquo;un bouton de menu burger, mais aussi servir \u00e0 corriger un bouton d\u00e9j\u00e0 existant.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><em>Sources : <a href=\"https:\/\/www.w3.org\/WAI\/ARIA\/apg\/patterns\/disclosure\/\" lang=\"en\">Disclosure (Show\/Hide) Pattern<\/a> et <a href=\"https:\/\/www.w3.org\/WAI\/ARIA\/apg\/patterns\/dialog-modal\/\" lang=\"en\">Dialog (Modal) Pattern<\/a><\/em><\/p>","protected":false},"excerpt":{"rendered":"<p>Dans cet article, nous explorerons comment cr\u00e9er un bouton burger de mani\u00e8re accessible.<\/p>","protected":false},"author":6,"featured_media":3624,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[22],"tags":[],"class_list":["post-3025","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\/3025","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=3025"}],"version-history":[{"count":197,"href":"https:\/\/ideance.net\/blog\/en\/wp-json\/wp\/v2\/posts\/3025\/revisions"}],"predecessor-version":[{"id":4334,"href":"https:\/\/ideance.net\/blog\/en\/wp-json\/wp\/v2\/posts\/3025\/revisions\/4334"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/ideance.net\/blog\/en\/wp-json\/wp\/v2\/media\/3624"}],"wp:attachment":[{"href":"https:\/\/ideance.net\/blog\/en\/wp-json\/wp\/v2\/media?parent=3025"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/ideance.net\/blog\/en\/wp-json\/wp\/v2\/categories?post=3025"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/ideance.net\/blog\/en\/wp-json\/wp\/v2\/tags?post=3025"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}