ハンバーガーメニューを作ってみる

2024.02.13 09:00
2024.02.16 10:37
ハンバーガーメニューを作ってみる

スマホ用のハンバーガーメニューを作ってみます。
CSSとJavascriptを使います。

デモはこちら
https://tech.exeweb.net/sample/3942/

まずはHTMLから。

  <div class="gnavSpWrapper" id="GnavSpWrapper">
    <div class="gnavSpBtn" id="GnavSpBtn">
      <span class="gnavSpBtn__line gnavSpBtn__line--1"></span>
      <span class="gnavSpBtn__line gnavSpBtn__line--2"></span>
      <span class="gnavSpBtn__line gnavSpBtn__line--3"></span>
    </div>
    <nav class="gnavSpContainer">
      <ul>
        <li>メニュー1</li>
        <li>メニュー2</li>
        <li>メニュー3</li>
      </ul>
    </nav>
    <div class="gnavSpBg" id="GnavSpBg"></div>
   </div>

「gnavSpBtn__line」でボタンのラインも表現しています。
次にCSSです。

.gnavSpBtn {
  position: absolute;
  left: 20px;
  top: 20px;
  width: 50px;
  height: 40px;
  cursor: pointer;
  z-index: 300;
  display: block;
  transition: all 0.5s;
}
.gnavSpBtn:hover {
  opacity: .3;
}
.gnavSpBtn__line {
  position: absolute;
  width: 50px;
  height: 3px;
  left: 0;
  background-color: #000;
  transition: all 0.5s;
}

.gnavSpBtn__line--1 {
  top: 1px;
}

.gnavSpBtn__line--2 {
  top: 18px;
}

.gnavSpBtn__line--3 {
  top: 36px;
}

.gnavSpOpen .gnavSpBtn__line--1 {
  transform: rotate(-45deg);
  top: 11px;
}

.gnavSpOpen .gnavSpBtn__line--2 {
  opacity: 0;
}

.gnavSpOpen .gnavSpBtn__line--3 {
  transform: rotate(45deg);
  top: 11px;
}


.gnavSpContainer {
  position: fixed;
  left: -100%;
  top: 0;
  width: 70%;
  height: 100vh;
  padding-top: 8%;
  background-color: #fff;
  transition: all 0.5s;
  z-index: 200;
  overflow-y: auto;
}

.gnavSpOpen .gnavSpContainer {
  left: 0;
}

.gnavSpBg {
  position: fixed;
  left: 0;
  top: 0;
  width: 100vw;
  height: 100vh;
  z-index: 5;
  background-color: #000;
  opacity: 0;
  visibility: hidden;
  transition: all 0.5s;
  cursor: pointer;
  z-index: 100;
}

.gnavSpOpen .gnavSpBg {
  opacity: 0.5;
  visibility: visible;
}
.gnavSpOpen .gnavSpBg:hover {
  opacity: 0.3;
}

そして最後にJavascript。

window.onload = function () {
    var gnavSpWrapper = document.getElementById('GnavSpWrapper');
    var gnavSpBtn = document.getElementById('GnavSpBtn');
    var gnavSpBg = document.getElementById('GnavSpBg');

    gnavSpBtn.addEventListener('click', function () {
        gnavSpWrapper.classList.toggle('gnavSpOpen');
    });
    gnavSpBg.addEventListener('click', function () {
        gnavSpWrapper.classList.remove('gnavSpOpen');
    });
};

Javascriptのライブラリは使っていません。
動きも滑らかだし、使いやすいですね。

今回は以上です!