今回は、「アクセシビリティを意識したハンバーガーメニューの作り方」についてまとめました。
ハンバーガーメニューは頻繁に実装するパーツなので、是非実装できるようになりましょう。
以下の記事を参考にさせて頂きました。
ハンバーガーボタン 何で作ってる?僕なりの作り方を解説してみる。
アクセシビリティを意識したハンバーガーメニューの作り方
デモサイトはこちら。
See the Pen
Untitled by ゆーじろー (@yuji64)
on CodePen.
マウスを使わずタブ操作でハンバーガーメニューを閉開できるので、アクセシビリティ的に良いです。
HTML
<div class="button"> <button type="button" id="js-buttonHamburger" class="c-button p-hamburger" aria-controls="global-nav" aria-expanded="false"> <span class="p-hamburger__line"> <span class="u-visuallyHidden"> メニューを開閉する </span> </span> </button> </div> <div class="groval"> <a href="">グローバルメニューです</a> </div>
ハンバーガーメニューを作るポイントは、buttonタグで実装することです。
buttonタグを使うことで、タブ操作でハンバーガーメニューの閉開が可能となります。
CSS
.c-button { position: relative; display: inline-block; text-decoration: none; -webkit-appearance: none; -moz-appearance: none; appearance: none; border: none; background-color: transparent; cursor: pointer; } .p-hamburger { position: absolute; top: 0; bottom: 0; right: 0; width: 50px; height: 50px; transition: all .3s ease-in-out; background-color: red; } .p-hamburger__line { position: absolute; top: 0; right: 0; bottom: 0; left: 0; margin: auto; width: 18px; height: 2px; background-color: #fff; -webkit-transition: inherit; transition: inherit; } .p-hamburger__line::before, .p-hamburger__line::after { position: absolute; display: block; width: 100%; height: 100%; background-color: inherit; content: ''; -webkit-transition: inherit; transition: inherit; } .p-hamburger__line::before { top: -5px; } .p-hamburger__line::after { top: 5px; } .p-hamburger[aria-expanded="true"] .p-hamburger__line { background-color: transparent; } .p-hamburger[aria-expanded="true"] .p-hamburger__line::before, .p-hamburger[aria-expanded="true"] .p-hamburger__line::after { top: 0; background-color: #f9d8ae; } .p-hamburger[aria-expanded="true"] .p-hamburger__line::before { transform: rotate(45deg); } .p-hamburger[aria-expanded="true"] .p-hamburger__line::after { transform: rotate(-45deg); } .u-visuallyHidden { position: absolute; white-space: nowrap; width: 1px; height: 1px; overflow: hidden; border: 0; padding: 0; clip: rect(0 0 0 0); clip-path: inset(50%); margin: -1px; } .groval { background-color: pink; height: 100vh; display: flex; align-items: center; justify-content: center; flex-direction: column; visibility: hidden; a { font-size: 2.2rem; margin-bottom: 25px; } } .is-drawerActive .groval { visibility: visible; }
JavaScript
(function () { $('#js-buttonHamburger').click(function () { $('body').toggleClass('is-drawerActive'); if ($(this).attr('aria-expanded') == 'false') { $(this).attr('aria-expanded', true); } else { $(this).attr('aria-expanded', false); } }); }) ();