Webサイトを見ていて、このような3本線のアイコンのようなものを見たことはありますか?
この3本線をWebサイトに置くときに、どのようにして実装しようと思いますか?
この記事を読んだ方の多くは、「画像として配置する」ことを考えていると思います。しかし、実際にはこう言った簡単な図形はHTMLとCSSを使って作っていくと良いとされています。
画像を使わず、マークアップで実装するメリットとして、次のものがあります。
- 画像に比べて、容量が軽くなりやすい
- 拡大した時に画質が荒くならない
- 色や形の変更が容易
- 変形のアニメーションを起こすことができる
ハンバーガーメニューとは
ここまで紹介してきた3本線は「ハンバーガーメニュー」という名前がついています。
聞くだけでお腹が空いてくるメニューですね。筆者は、この記事を書いている日の昼食がハンバーガーになりました。
なぜそんな美味しそうな名前をしているかというと、3本線の上下の線をバンズ、真ん中の線をパティに見立てているからです。
ではハンバーガーメニューとは何かについて機能的な面から説明していきます。
ハンバーガーメニューとは、一言で表すと「モバイル端末での表示に対応したナビゲーションメニューのデザインの一つ」です。
PCサイズではうまく表示できるナビゲーションも、モバイル端末のサイズに横幅が変わると、次のように溢れ出してしまいます。(グレーの領域がモバイル端末のサイズだとします。)
See the Pen ハンバーガーメニュー - 使わない場合 by ZeroPlus (@zeroplus-programming) on CodePen.
しかし、ハンバーガーメニューを使い、ナビゲーションを収納することで、モバイル端末でもナビゲーションを綺麗に表示させることが可能となります。
次のデモのハンバーガーメニューをクリックしてみてください。
See the Pen ハンバーガーメニュー - 見本 by ZeroPlus (@zeroplus-programming) on CodePen.
ナビゲーションの画面とコンテンツの画面とで切り替えることができます。
ハンバーガーメニューをまとめると
- 3本線のアイコンのような形をしている
- クリックするとナビゲーションが開ける
- 慣例的な機能的なデザインの一つ
と言ったものになります。
ここまでハンバーガーメニューについて紹介してきました。次は実際に作るための知識を学んでいきましょう。
ちなみに、クリックした時の動きはJavaScriptというプログラミング言語を使って書いているので、今回は扱いません。
ハンバーガーメニューを作る
こちらはハンバーガーメニューの見た目だけを作ったものになります。
See the Pen ハンバーガーメニュー - 見た目 by ZeroPlus (@zeroplus-programming) on CodePen.
これを参考に、HTMLとCSSをみながら説明していきます。
HTMLの構造
<button class="hamburger">
<span class="hamburger_bar"></span>
<span class="hamburger_bar"></span>
<span class="hamburger_bar"></span>
</button>
ハンバーガーメニューに必要なものは次の2つです
- クリックできる範囲
- 直線 × 3
.hamburger
がハンバーガーメニューのクリックできる範囲、.hamburger_bar
が3つで3本線を作っています。
button
タグを使っている理由としては、「クリックできる要素である」と言うことをシステムに認識させるためです。div
タグで作っている記事もありますが、ただdiv
タグで作るだけだと「クリックできる要素である」とシステムに認識させることができないため、不便になってしまう場合があります。
span
タグで線を作っているのは、小さめの装飾だからですね。こちらはspan
である必要はないですが、慣例的にspan
タグを使用することが多いです。
次はCSSをみていきます。
CSSでスタイリング
.hamburger {
width: 40px;
height: 32px;
position: relative;
}
.hamburger_bar {
display: block;
width: 100%;
height: 4px;
position: absolute;
left: 0;
background: #000;
}
.hamburger_bar:nth-child(1) {
top: 0;
}
.hamburger_bar:nth-child(2) {
top: 50%;
transform: translateY(-50%);
}
.hamburger_bar:nth-child(3) {
top: 100%;
transform: translateY(-100%);
}
ポイントとしては、position
を使って3本線を配置しているところです。
position
を使って配置することで、クリックした時の変形をやりやすくしています。
また、span
タグはインライン要素なので、height
をつけるときは必ずdisplay: block;
をかけてあげましょう。
ハンバーガーメニューについては以上となります。
最後に、ハンバーガーメニュー以外のナビゲーションメニューのデザインを紹介します。
その他のさまざまなメニュー
ナビゲーションメニューのデザインには、ハンバーガーメニューの他にも種類があります。それぞれ同じような役割を持っている場合もあれば、デザインから特定の役割をもつメニューまであります。
下記の名前はデザインの名前として広く使われているものです。知っておくと、検索する時に役立ちます。
ケバブメニュー
See the Pen ケバブメニュー by ZeroPlus (@zeroplus-programming) on CodePen.
トルコ料理のケバブのような形をしているからケバブメニューという名前になっているようです。縦に串刺しになっている肉のようだからケバブと付いたようです。筆者的には焼き鳥の「つくね」の方がしっくりくる気がします。
機能的にはハンバーガーメニューと同じような扱い方をします。Webサイトよりもアプリケーションで見かけることの方が多いです。
PC版のChromeの右上のメニューのボタンもケバブメニューとなっています。
ミートボールメニュー
See the Pen ミートボールメニュー by ZeroPlus (@zeroplus-programming) on CodePen.
ケバブメニューを倒したものがミートボールメニューです。もはや訳がわからない。おそらく、名づけに深い意味はないです。
機能的にはハンバーガーメニューやケバブメニューと同じような扱い方をします。こちらも、Webサイトよりもアプリケーションで見かけることの方が多いです。
筆者の体感、スマホアプリはこちらの方が使われている気がします。
弁当メニュー
See the Pen 弁当メニュー by ZeroPlus (@zeroplus-programming) on CodePen.
格子状で弁当のように見えるから弁当メニューと呼びます。
機能的にはハンバーガーメニューやケバブメニューと同じような扱い方をします。こちらも、アプリケーションで見かけることの方が多いです。たまに、学校や役所のホームページで使われていたりまします。
ドネルメニュー
See the Pen ドネルメニュー by ZeroPlus (@zeroplus-programming) on CodePen.
ドネルメニュー、ドネルケバブメニューと呼んだりします。
機能的には他のメニューと同様の扱い方をするのに加えて、フィルター(絞り込み機能)に使う場合もあるようです。
以上たくさんのメニューを紹介してきました。
ハンバーガーメニューがダントツの使用頻度なので、一旦はハンバーガーメニューだけ覚えておけばOKです。
まとめ
今回はハンバーガーメニューついて紹介してきました。モバイルサイズのサイトを作る上では、必ず作る機会があるデザインです。
ポイントとしては、「HTML, CSSでハンバーガーメニューを作れる」という部分が抑えられていれば大丈夫です。
マークアップを自分でできるようになれば、JavaScriptで動かす時も簡単に実装できますので、ぜひ構造を理解して、自分で作れるようになりましょう。