Hamburger

ボタン

html


  <body>
  <div id="layer"></div>
  <div id="wrap">
  <header>
    <h1 id="brand">Hamburger</h1>
    <p id="openMenu"><a href="#"><img src="images/hambtn.png" alt="ボタン" width="30" height="auto" /></a></p> // ハンバーガーボタン
    <nav id="global-menu">
      <span id="close-btn">X</span> // クローズボタン
      <ul>
        <li><a href="#">Home</a></li>
        <li><a href="#">About</a></li>
        <li><a href="#">News</a></li>
        <li><a href="#">Link</a></li>
        <li><a href="#">Contact</a></li>
      </ul>
    </nav>
  </header>
  <div id="content">
  ....
  </div>
  <footer></footer>
  </div>
  </body>

css


  body{
    position: relative; /* position: fixed;をつけた#layer・header・#global-menuのz-indexをコントロールするための起点 */
    overflow-x: hidden; /* メニューが誤って表示されないように */
  }

  #layer{
    position: fixed;
    top: 0;
    width: 100%;
    height: 100%;
    background-color: rgba(0,0,0,0.7);
    z-index: 1; /* ヘッダー・ボディーより手前に */
    display: none;
  }
  /* ========================== */
  /* ヘッダー              */
  /* ========================== */
  header{
    width: 100%;
    height: 80px;
    background-color: #FC3666;
    color: #fff;
    position: fixed;
    top: 0;
  }

  header h1, header p{
    margin: 0;
    padding: 0;
  }

  header h1#brand{
    position: absolute;
    top: 20px;
    left: 20px;
  }

  header #openMenu{
    position: absolute;
    top: 20px;
    right: 20px;
  }

  header nav#global-menu{
    position: fixed;
    top: 0;
    right: -200px; /* 幅の分だけ隠す */
    width: 200px;
    height: 100%; /* 画面縦全部 */
    background-color: #fff;
  }

  header nav#global-menu span#close-btn{
    display: block;
    width: 30px;
    height: 20px;
    color: #fff;
    padding: 10px;
    margin-bottom: 20px;
    text-align: center;
    background-color: #FC3666;
    cursor: pointer;
  }

  header nav#global-menu ul{
    list-style-type: none;
    margin: 0;
    padding: 0;
  }

  header nav#global-menu ul li{
    padding: 10px;
    border-bottom: 1px dotted #FC3666;
  }

  header nav#global-menu ul li a{
    display: block;
    width: 100%;
    height: 100%;
    text-decoration: none;
  }

  /* ========================== */
  /* コンテンツ              */
  /* ========================== */
  #content{
    padding: 80px 10px 10px;
  }

jQuery


  $(document).ready(function(){
    var toggleBtn = $('#openMenu'); // ハンバーガーボタン
    var header = $('header');
    var closeBtn = $('#close-btn'); // クローズボタン
    var gMenu = $('#global-menu'); // グローバルメニュー
    var body = $(document.body); // ボディ
    var menuWidth = gMenu.outerWidth(); // メニュー幅(ボーダー・パディング込みの幅)
    var layer = $('#layer'); // メニューを出したときのバックグラウンドレイヤー

    toggleBtn.children('a').on('click', function(e){
      e.preventDefault();
      body.toggleClass('open');

      if (body.hasClass('open')) {
        body.animate({'right': menuWidth}, 300); // メニューの幅の分だけ左のポジションへ
        header.animate({'right': menuWidth}, 300); // ヘッダーもfixedしているのでbodyと同様に
        gMenu.animate({'right': 0}, 300); // right:0;のポジションへ
        layer.show();
      }else{
        body.animate({'right': 0}, 300); // right:0;のポジションへ
        header.animate({'right': 0}, 300);
        gMenu.animate({'right': -menuWidth}, 300); // メニューの幅の分だけ右のポジションへ
        layer.hide();
      }
    });

    layer.on('click', function(){ // レイヤーをクリックしたら
      body.animate({'right': 0}, 300);
      header.animate({'right': 0}, 300);
      gMenu.animate({'right': -menuWidth}, 300);
      layer.hide();
      body.removeClass('open');
    });

    closeBtn.on('click', function(){ // クローズボタンを押したら
      body.animate({'right': 0}, 300);
      header.animate({'right': 0}, 300);
      gMenu.animate({'right': -menuWidth}, 300);
      layer.hide();
      body.removeClass('open');
    });
  });