WordPressのテーマメニューをレスポンシブでハンバーガーメニューにする
自作テーマでタイトルのような設計をしたい場面がよくある気がするんですが、検索するとプラグインを使った実装以外まとまった情報がなかったのでざっくりまとめてみます。
テーマメニューの設定がされている状態で、jQueryとCSSを追加します。
jQuery
(function ($) {
const gNav = 'menu-global-nav-container';
const gNavBtn = 'hd_menu__btn';
const gNavOverlay = 'nav_overlay';
const gNavActive = 'is-active';
const spMenuBtn = () => {
if ($(`.${gNav}`).length) {
$(`.${gNav}`).append(`<div class="${gNavBtn}"></div><div class="${gNavOverlay}"></div>`);
}
}
const menuToggle = () => {
if ($(`.${gNav}`).length) {
$(`.${gNavOverlay}`).toggleClass(gNavActive).parent(`.${gNav}`).toggleClass(gNavActive);
}
}
$(function () { spMenuBtn(); });
$(`.${gNav}`).on('click', `.${gNavBtn}, .${gNavOverlay}`, menuToggle);
})(jQuery);
クラス名は適宜調整してください。
[menu-global-nav-container]はWordPressのテーマメニューにデフォルトで付与されるクラス名、それ以外は適当につけています。
- DOM生成時に、テーマメニューにメニューボタン用の要素を追加
- ハンバーガーボタンまたはオーバーレイをクリックされたら表示非表示切り替え
機能としてはこれだけです。
jQueryで実装する場合は以下不要です。
続いてCSSで実装する場合。
CSS
.menu-global-nav-container ul {
display: flex;
}
@media screen and (max-width:780px) {
.menu-global-nav-container {
position: fixed;
top: 0;
right: -60vw;
width: 60vw;
padding-top: 0;
transition: right .2s ease-in-out;
z-index: 100;
}
.menu-global-nav-container.is-active {
right: 0;
}
.menu-global-nav-container ul {
position: absolute;
top: 0;
left: 0;
padding: 3em 2em;
width: 100%;
height: 100vh;
background-color: rgba(0,0,0,.6);
z-index: 120;
}
.menu-global-nav-container ul {
display: block;
}
.menu-global-nav-container ul li a {
color: #fff;
}
.hd_menu__btn {
position: absolute;
top: 15px;
left: -50px;
display: block;
width: 50px;
height: 44px;
color: #fff;
background-color: rgba(0,0,0,.6);
border-radius: 6px 0 0 6px;
z-index: 100;
}
.hd_menu__btn:before {
position: absolute;
top: 0;
left: 3px;
content: "menu";
font-family: 'Material Icons';
font-size: 44px;
}
.menu-global-nav-container.is-active .hd_menu__btn:before {
content: "close";
}
.nav_overlay {
position: fixed;
top: 0;
left: 0;
width: 100%;
height: 110%;
z-index: 50;
pointer-events: none;
}
.nav_overlay.is-active {
background-color: rgba(255,255,255,.7);
pointer-events: auto;
}
}
デザイン的な要素はできるだけ排除しています。
メニューはデフォルトでは画面右側にはみ出しています。
メニューボタンは[left: -50px;]を指定して画面内に納めています。
クラス[is-active]がつくと、オーバーレイ表示とメニュー全体が左に60vwずれます。
COMMENT FORM