よもやまチョモランマ

上から降りてくるスマホメニュー

WordPressのカスタムメニューをカスタマイズすることに挑戦して1週間。

やってるうちにPCのときとスマホのときにやりたいことがゴッチャになってきて良くない。

PCのときはCSSだけでもできる。サブメニューはホバーでもOK。

スマホはボタンタップでスルッと開く動きが欲しくなるのでJSが必要になる。
サブメニューは親メニューをタップして開くというのは無理。
だって、親メニューにもリンクがあるからね。
クリックした途端、リンク先に飛んじゃうんだよ。
サブメニューも出っぱなしの開閉しないメニューしかできない。
プラグイン使えば出来るけど・・・

とりあえず、1階層のみで、イイ感じにおりてくるソースを見つけたので貼っておきます。
【参考】【JS】スマホ用のハンバーガーメニューをjQueryとCSSで作成する方法

ヘッダーにはトグルとメニューとJS。

<div class="navToggle">
<span></span><span></span><span></span><span>menu</span>
</div>

<script>
$(function() {
    $('.navToggle').click(function() {
        $(this).toggleClass('active');
 
        if ($(this).hasClass('active')) {
            $('.globalMenuSp').addClass('active');
        } else {
            $('.globalMenuSp').removeClass('active');
        }
    });
});
</script>

<nav class="globalMenuSp">
<?php wp_nav_menu(array('theme_location' => 'header_nav')); ?>
</nav>

外部ファイルでは動かなかったので直書き。

CSSはこれ。

nav.globalMenuSp {
    position: fixed;
    z-index: 2;
	top: 0;
    left: 0;
    background: #fff;
    color: #000;
    text-align: center;
    transform: translateY(-100%);
    transition: all 0.6s;
    width: 100%;
}
 
nav.globalMenuSp ul {
    background: #fff;
    margin: 0 auto;
    padding: 0;
    width: 100%;
}
 
nav.globalMenuSp ul li {
    list-style-type: none;
    padding: 0;
    width: 100%;
    border-bottom: 1px dotted #ddd;
}
 
/* 最後のラインは実線 */
nav.globalMenuSp ul li:last-child {
    padding-bottom: 0;
	border-bottom: 3px solid #ddd;
}
 
nav.globalMenuSp ul li a {
    display: block;
    color: #000;
    padding: 13px 0;
}
 
/* このクラスを、jQueryで付与・削除する */
nav.globalMenuSp.active {
    transform: translateY(0%);
}

/*----- トグルボタン -----*/
.navToggle {
    display: block;
    position: fixed;    /* bodyに対しての絶対位置指定 */
    right: 0;
    top: 0;
    width: 50px;
    height: 50px;
    cursor: pointer;
    z-index: 3;
    background: #666;
    text-align: center;
}
 
.navToggle span {
    display: block;
    position: absolute;    /* .navToggleに対して */
    width: 28px;
    border-bottom: solid 3px #eee;
    -webkit-transition: .35s ease-in-out;
    -moz-transition: .35s ease-in-out;
    transition: .35s ease-in-out;
    left: 11px;
}
 
.navToggle span:nth-child(1) {
    top: 10px;
}
 
.navToggle span:nth-child(2) {
    top: 18px;
}
 
.navToggle span:nth-child(3) {
    top: 26px;
}
 
.navToggle span:nth-child(4) {
    border: none;
    color: #fff;
    font-size: 9px;
    font-weight: bold;
    top: 32px;
}

/* 最初のspanをマイナス45度に */
.navToggle.active span:nth-child(1) {
    top: 18px;
    left: 11px;
    -webkit-transform: rotate(-45deg);
    -moz-transform: rotate(-45deg);
    transform: rotate(-45deg);
}
 
/* 2番目と3番目のspanを45度に */
.navToggle.active span:nth-child(2),
.navToggle.active span:nth-child(3) {
    top: 18px;
    -webkit-transform: rotate(45deg);
    -moz-transform: rotate(45deg);
    transform: rotate(45deg);
}

けっこうなボリュームですな。

やっぱりグローバルメニューはCSSを別にしたほうがいいのかな、とか考えちゃいますね。