Written by Kasumi

【簡単】スマホでよくある横スライドメニューを実装する方法【jQuery・CSS使用】

スマホでよくあるハンバーガーメニューボタンを押すと、横からスライドして出てくるメニューを実装したい。

jQuery・CSSを使って簡単に実装したい。

本記事ではjQuery・CSSを使ってこのような悩みを解決します。

実装サンプル

See the Pen
横スライドメニューjQUery
by Kohei (@kouk05)
on CodePen.0

上記はコードペンを使った実装サンプルです。

ハンバーガーメニューボタンを押して頂くと横からメニューがスライドしてきます。

次章より実装方法について紹介します。

HTML

<!-- ハンバーガーメニューボタン -->
<div class="drawer">
  <div class="drawer-open"><span></span></div>
</div>

<!-- 横スライドメニュー背景 -->
<div class="drawer-content-bg"></div>
<!-- 横スライドメニュー -->
<div class="drawer-content">
  <div class="drawer-content-wrap">
    コンテンツコンテンツコンテンツ
  </div>
</div>

まず最初にHTMLで横スライドメニューのひな形を作ります。

横スライドメニューを出すのに必要なクリック要素(ハンバーガーメニューなど)と、スライドメニュー要素をdivタグなどで作成します。

横スライドメニューで背景を入れたい(薄い黒レイヤーなど)場合はそちらもdivタグで作成します。

注意点としてスライドメニュー背景とスライドメニューコンテンツは別々で作成します。親要素・子要素の関係にしないようにしてください。

CSS


/* ハンバーガーメニュー */
  .drawer-hidden {
    display: none;
  }
  .drawer-open {
    display: flex;
    height: 20px;
    width: 20px;
    justify-content: center;
    align-items: center;
    position: relative;
    z-index: 100;
    cursor: pointer;
    margin: auto;
    left: -6px;
  }
  .drawer-open span,
  .drawer-open span:before,
  .drawer-open span:after {
    content: "";
    display: block;
    height: 2px;
    width: 20px;
    border-radius: 3px;
    background: #595757;
    transition: 0.5s;
    position: absolute;
  }
  .drawer-open span:before {
    bottom: 7px;
  }
  .drawer-open span:after {
    top: 7px;
  }
  .drawer-open.clicked span {
    background: rgba(255, 255, 255, 0);
  }
  .drawer-open.clicked span::before {
    bottom: 0;
    transform: rotate(45deg);
  }
  .drawer-open.clicked span::after {
    top: 0;
    transform: rotate(-45deg);
  }

/* 横スライドメニュー*/
  .drawer-content {
    width: 100%;
    height: 100%;
    position: fixed;
    top: 61px;/*ヘッダーの高さ*/
    left: 100%;/*向き変更*/ 
    background: #fff;
    transition: 0.5s;
    margin-left: 70px;/*向き変更・背景見せる場合マージン入れる*/
    padding-right: 70px;/*向き変更・背景見せる場合マージン入れる*/
    overflow: scroll;
  }
  .drawer-content-bg {
    width: 100%;
    height: 100%;
    position: fixed;
    top: 60px;
    right: 100%;
    transition: 0.5s;
    background: rgba(0, 0, 0, 0.7);
    border-top: 1px solid #eee;
  }
  .drawer-content.clicked {
    left: 0;/*向き変更*/
  }
  .drawer-content-bg.clicked {
    left: 0;
  }

次にCSSでハンバーガーメニュー・横スライドメニューを装飾します。

横スライドメニューにposition: fixed;を指定し、左右の位置をleft: 100%;もしくはright: 100%;にして通常時(ハンバーガーメニューボタンを押す前)は隠す処理をします。

コメントアウトで向き変更と書かれてるクラスに付与されてるプロパティは横スライドメニューを左から出すのか、右から出すのかの処理になります。

上記CSSコードは右からスライドメニューを出す仕様になるので、左から出したい場合は上記向き変更コメントアウト部分のleft、right、margin-left、padding-rightを逆にしてください。

例:left: 100%;だったらright: 100%;にする

次にハンバーメニューボタンが押された時のドロワーコンテンツの装飾をします。

次章で説明しますが、ハンバーガーメニューボタンを押したらクラスが付与される仕様にするので、今回の例ではclickedクラスを付与します。

clickedクラスが付与されたら、冒頭で設定したleft: 100%;もしくはright: 100%;を0にします。

CSSはざっと以上です。

jQuery

$(function(){
  $('.drawer-open').click(function(){
    $(this).toggleClass('clicked');
    $('.drawer-content').toggleClass('clicked');
        $('.drawer-content-bg').toggleClass('clicked');
  });
});

最後にjQueryでハンバーガーメニューをクリックしたら、クリックした要素と横スライドメニューにクラスを付与します。

toggleClassメソッドを使う事で、クラスが付与された状態だったらクラスを取り除き、逆に付与されてなかったらクラスを追加してくれます。

以上でjQuery・CSSを使った横スライドメニューの完成です。

まとめ

jQueryを使わず、CSSだけで横スライドメニューを実装してる記事も紹介してるのでぜひご覧ください。
以下リンク先です。

以上で解説を終わります。

目次

関連記事

jQuery

jQueryでhtml要素の読み込み完了後にイベントを実行する方法

更新日:2022.09.09
4555
jQuery

jqueryを使って要素を移動・追加・親要素を作成する方法【簡単テンプレ公開】

更新日:2022.09.09
3960
jQuery

【簡単jQuery】radioボタンのcheckedを取得し、value値によってイベントを発火する方法。

更新日:2022.09.09
9759
jQuery

jQueryのdatetimepickerで選択した日付によって時間を変更する方法

更新日:2022.09.09
2937