【コピペでできる!】jQueryを使用したハンバーガーメニューの作り方

コーディング初学者の多くが躓く、ハンバーガーメニュー!今回はハンバーガーメニューを2パターン作成してくよ★

今回はハンバーガーメニューの作り方をざっくり解説して行きます。早速いってみましょう。

フェードインで現れるハンバーガーメニュー

まずはこんな感じのハンバーガーメニューを作っていきます。

Image from Gyazo

完成像の確認

完成像のコードは以下になります。ざっと確認しておきましょう!

ファイルとフォルダの確認

まずは、こちらのリンクからファイルをダウンロードします。

フォルダの中身を確認しましょう!以下のファイルが格納されています。

  • index.html
  • style.css
  • reset.css
  • script.js

index.htmlをブラウザで表示しましょう。現状は、SP版のヘッダーのCSSは記述されていない状態です。

Image from Gyazo

HTMLにボタンを追記しよう

それでは、まずHTMLにハンバーガーボタンのパーツとなる要素を書いていきます。headerの閉じタグの前に以下の記述をしましょう。

<div class="burger-btn"><!-- ③ハンバーガーボタン -->
  <span class="bar bar_top"></span>
  <span class="bar bar_mid"></span>
  <span class="bar bar_bottom"></span>
</div>

このHTML要素をCSSで装飾してハンバーガーボタンの見た目を作っていきます。

⚠上記の記述は、賛否両論あると思います。divタグをbuttonにした方が良いとか、spanではなくsvg、または、疑似要素にすべきとか。解説の簡単さを重視して、そういった異論は一旦無視します。

CSSでボタンを装飾しよう

それではCSSでボタンの見た目を作っていきます。今回は3本線があるだけなので、style.cssのSP版の記述に以下のCSSを追記しましょう。

.burger-btn{
  display: block;      
  width: 39px;      
  height: 39px;      
  position: relative;      
  z-index: 3;
  border:none;    
}    
.bar{      
  width: 20px;      
  height: 1px;        
  display: block;      
  position: absolute;      
  left: 50%;      
  transform: translateX(-50%);      
  background-color: #fff;    
}    
.bar_top{   
  top: 10px;
}
.bar_mid{    
  top: 50%;
  transform: translate(-50%,-50%);
}
.bar_bottom{
  bottom: 10px;
}

PC版の方では「.burger-btn」をdisplay: none;にしておきましょうね。

CSSでハンバーガーメニューが開いたときの見た目をつくろう

それでは次に、ハンバーガーメニューが開いたときの見た目をつくっていきましょう。ハンバーガーメニューが開いたときは以下2点が見た目の変化をして現れます。

  • ボタンが3本線から☓印になる
  • メニューが非表示から全画面表示になる
Image from Gyazo

3本線が☓印になるCSS

3本線に対して、closeというclassを付加したときにばつ印になるようにCSSを書いていきます。(closeというclassの付加はjQueryを後ほど使用します)

style.cssのSP版の記述の部分に以下のようにCSSを追記しましょう。

.burger-btn.close .bar_top{      
  transform: translate(-50%,10px) rotate(45deg);      
  transition: transform .3s;    
}    
.burger-btn.close .bar_mid{      
  opacity: 0;       
  transition: opacity .3s;    
}    
.burger-btn.close .bar_bottom{      
transform: translate(-50%,-8px) rotate(-45deg);      
transition: transform .3s;    
}

これで、「.burger-btn」にcloseというclassが追加されたときに、3本線がばつ印になるCSSはOKです。

メニューを全画面表示にする

次にメニューを全画面表示にするCSSを書きます。PC版では横並びになっているメニューを縦に並べるのも忘れないようにしましょう。

.nav-wrapper{      
  /*display: none;*/      
  width: 100vw;      
  height: 100vh;      
  position: fixed;      
  top: 0;      
  left: 0;       
  z-index: 2;     
}     
.header-nav{        
  width: 100%;        
  height: 100%;        
  background-color:#1B1310;        
  z-index: 2;      
}     
.header-nav.nav-list{        
  display: block;        
  position: absolute;        
  top: 50%;        
  left: 50%;        
  transform: translate(-50%,-50%);        
  text-align: center;      
}      
.header-nav.nav-item{        
  margin-right: 0;        
  margin-bottom: 40px;      
}

上記が追記できたら、一番上の display:none; のコメントアウトを外して非表示にしておきます。

jQueryでクリックイベントを設定しよう

それでは最後にjQueryでクリックイベントを設定しましょう。

まずはindex.htmlのbodyの閉じタグの直前でjQueryとscript.jsを読み込みます。

<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script>    
<script src="./js/script.js"></script>

jQueryはGoogleが提供しているCDNを使用しています。

それでは、script.jsに以下の記述をしましょう!

$('.burger-btn').on('click',function(){
  $('.burger-btn').toggleClass('close');
  $('.nav-wrapper').fadeToggle(500);
});

上記の記述を日本語にします。

  • 1行目:.burger-btnをクリックすると
  • 2行目:.burger-btnにcloseというclassを追加/削除する
  • .nav-wrapperがフェードイン/フェードアウトする

ここで、ブラウザの状態を確認しましょう。ハンバーガーメニューが表示されたときにスクロールできてしまいます。なので、style.cssとscript.jsに以下の記述を追記します。

【style.css】

body.noscroll{
  overflow: hidden;
}

【script.js】

$('.burger-btn').on('click',function(){
  $('.burger-btn').toggleClass('close');
  $('.nav-wrapper').fadeToggle(500);
  $('body').toggleClass('noscroll');
});

これで、ハンバーガーメニューが開いたときにスクロールを固定できます。

横からニュっと出てくるハンバーガーメニュー

次に以下のような横からニュっと出てくるメニューを作りましょう!

完成像の確認

完成像は以下のような感じです!ボタンを押すと右からメニューが出てきます。

Image from Gyazo

CSSを変更しよう

まずは、.nav-wrpperのCSSを変更します。display: none;になっている部分をtransform: translateX(100%); に書き換えましょう。ついでにtransitionも追記しておきます。

以下のようなコードになります。

.nav-wrapper{      
  transform: translateX(100%);      
  transition: .3s;      
  width: 100vw;      
  height: 100vh;      
  position: fixed;      
  top: 0;      
  left: 0;      
  z-index: 2;/*キービジュアルと.btn_triggerとの重なりの前後関係を調整*/     
  }     

次に、メニューが表示されたときの見た目もつくっておきましょう。今回はjQueryを使用して'slide-in'というclassが追加されたときに、transform: translateX(0); になるように設定しておきます。

.nav-wrapper.slide-in{      
  transform: translateX(0);      
  transition: .3s;     
}

これで、jQueryのtoggleClassでclassの追加/削除をしてあげれば0.3秒かけてtransform:translateX();の値が100から0になるはずです。

jQueryの記述を変更しよう

つぎにscript.jsを書き換えましょう。fadeToggleで表示/非表示を切り替えていた箇所を以下のように書き換えます。

$('.burger-btn').on('click',function(){
  $('.burger-btn').toggleClass('close');
  $('.nav-wrapper').toggleClass('slide-in');
  $('body').toggleClass('noscroll');
});

これで、横からニュっと出てくるハンバーガーメニューができました!

ハンバーガーメニューはHTML,CSS,js全てが関わってくるので最初は難しく感じるよね💨
しっかりと学んで理解していこう!

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA