2020.07.10

簡単!CSSので3本線(ハンバーガーメニュー)を作る。

ハンバーガーメニュー

こんにちは!雪乃です。

スマートフォンでホームページを閲覧した際に、右上や左上にある3本線(4,5本の場合もあります)。クリックするとホームページのメニューが表示するあれです。パソコンでも見かけることもありますね!

今さらですが、その3本線のハンバーガーメニューの作り方をご紹介します。

ハンバーガーメニューとは?

スマホやタブレット、最近ではPCサイトで3本の縦並び線のアイコンをクリックするとメニューや項目が展開するものがハンバーガーメニューです。3本線の見た目がハンバーガーに似ていることから、ハンバーガーメニューと言われています。別名ドロワーメニューとも呼ばれています。

スマートフォンのように表示領域の狭い画面の場合、メニューを多く表示していると、雑に見えてしまう場合もありスッキリしたデザインにするために使用していたり、他のコンテンツ表示のためのスペース確保のために使用されています。3本線が圧倒的に多いですが、4本線や3つの点など様々です。

左側にハンバーガーメニューがあるHTML


<header>
  <div class="h-menu">
      <input id="h-menu_checkbox" class="h-menuCheckbox" type="checkbox">
      <label class="h-menu_icon" for="h-menu_checkbox"><span class="hamburger-icon"></span></label>
      <label id="h-menu_black" class="h-menuCheckbox" for="h-menu_checkbox"></label>
      <div id="h-menu_content">
        <ul>
          <li><a href="#">ホーム</a></li>
          <li><a href="#">会社概要</a></li>
          <li><a href="#">制作実績</a></li>
          <li><a href="#">サービス</a></li>
          <li><a href="#">お問い合わせ</a></li>
      </div>
  </div>
</header>
<main>コンテンツ</main>

左側にハンバーガーメニューがあるCSS

header {
  padding: 16px;
  background: #1f2c37;
}

.h-menu{
  position: relative;
}

/*inputのcheckboxは非表示に*/
.h-menuCheckbox {
  display:none;
}

/*ハンバーガーメニュー*/
.h-menu_icon {
    display: inline-block;
    width: 30px;
    height: 30px;
    vertical-align: middle;
}

/*3本線*/
.hamburger-icon, .hamburger-icon::before, .hamburger-icon::after {
    content: '';
    display: block;
    position: absolute;
    z-index: 100;
    top:0;
    bottom:0;
    width: 32px;
    height: 3px;
    background: white;
    cursor: pointer;
}
.hamburger-icon:before {
    top: 10px;
}
.hamburger-icon:after {
    top: 20px;
}

/*メニュー以外を暗くする*/
#h-menu_black {
    display: none;
    position: fixed;
    z-index: 98;
    top: 0;
    left: 0;
    width: 100%;
    height: 100%;
    background: black;
    opacity: 0;
    transition: .7s ease-in-out;
}

/*中身*/
#h-menu_content {
    position: fixed;
    top: 0;
    left: 0;
    z-index: 99;
    width: 100%;
    max-width: 320px;
    height: 100vh;
    padding: 53px 16px 16px;
    background: #1f2c37;
    overflow: auto;
    transition: .3s ease-in-out;
    -webkit-transform: translateX(-105%);
    transform: translateX(-105%);
}

/*チェックボックスにチェックが入ったら表示*/
input:checked ~ .h-menu_icon .hamburger-icon{
    background: transparent;
}
input:checked ~ .h-menu_icon .hamburger-icon::before{
    -webkit-transform: rotate(-45deg);
    transform: rotate(-45deg);
    top:10px;
    z-index:999;
}
input:checked ~ .h-menu_icon .hamburger-icon::after{
    -webkit-transform: rotate(45deg);
    transform: rotate(45deg);
    top:10px;
    z-index:999;
}
input:checked ~ #h-menu_black {
    display: block;
    opacity: .8;
}
#h-menu_checkbox:checked ~ #h-menu_content {
    -webkit-transform: translateX(0%);
    transform: translateX(0%);
    box-shadow: 6px 0 25px rgba(0,0,0,.15);
}
.h-menu_icon .hamburger-icon,
.h-menu_icon .hamburger-icon::before,
.h-menu_icon .hamburger-icon::after,
#h-menu_black,
#h-menu_content{
    -webkit-transition: all .3s;
    transition: all .3s;
}

#h-menu_content ul{
    list-style: none;
    margin: 0;
    padding: 0;
}
#h-menu_content ul li{
    border-bottom: solid 1px white;
}
#h-menu_content li a {
    display: block;
    color: white;
    font-size: 14px;
    padding: 24px;
    text-decoration: none;
    transition-duration: 0.2s;
}
#h-menu_content li a:hover {
    background: #455b6d;
}

サンプル

See the Pen YzwvqKq by kitayukino (@kita_ggg) on CodePen.

まとめ

ハンバーガーメニューは今では比較的多くのサイトで、3本線が使用されているのでクリックすればメニューが開くとわかりますが、普段スマホを利用しない人や、初めて利用する方々には何のマークなのか認識しづらいですよね。

普段使い慣れている方でも、デザインや配色などで目立たなくどこにメニューがあるか探す場合もあります。

また、ハンバーガーメニューはクリックして開かないと、中身が分からないデメリットもあり、ユーザビリティの低下に繋がるとも言われています。

スマートフォンのメニューは、ハンバーガーメニュー以外にもヘッダーにPCのように表示したり、画面の下側にメニューを表示したり、ヘッダーのメニューの項目が多い場合は、はみ出る部分をスクロールで確認できるものなど様々です。

しかしどのメニューも、一長一短です。これだからダメと決めつけるのではなく、ご自身のサイトにあったメニューを利用することが一番大切だと思います。