向壁虚造

WEBサイト作成のためのプログラミング備忘録

CSSだけでメガメニューを作るには?

CSSだけ!メガメニューを作る簡単テクニック(レスポンシブ対応)

今回は、HTML&CSSだけで「メガメニュー」を作る方法を解説します。

コピペOKなので初心者でも簡単にレスポンシブ対応のメガメニューを実装できるかと思います。

また、レスポンシブ対応やメニュー開閉時にアニメーションを加えるテクニックも合わせて紹介するので、ぜひ最後まで読んでみてください。

メガメニューって何?

メガメニューとは、ドロップダウン時のスペースを拡張したメニューのことです。

メガメニューとは

上図のように、メニューの項目をマウスオーバーすると、下層メニューが表示される仕組みです。

十数個ほどのコンテンツ量であれば、メガメニューひとつで全ページにアクセスできるほどの収容力を誇ります。

また、デフォルトはスッキリと収まりますし、下層メニューを展開しても周囲のレイアウトを崩す心配もありません。

回遊率やユーザビリティを向上させたい人におすすめです。

HTML&CSSだけでメガメニューを作る方法

メガメニューなんて呼ぶと、ちょっと作るのが難しい印象を受けますが、基本的にHTML&CSSだけで済みます。

今回、紹介するテクニックについてはJavaScriptなどの他言語は一切使いませんので、初心者の方でも簡単に実装できるかと思います。

また、各自でデザインを調整できるようコメントアウトで説明を付しておくので参考にしてみてください。

(※レスポンシブ対応のメガメニューと非対応のメガメニューとでは、実装工程が大きく異なります。レスポンシブ対応したい場合はこの章は飛ばして、次章から読み始めると良いでしょう。)

1.HTMLを準備

まず、メガメニューを組み立てるための基礎を準備する必要があります。

メガメニューの基礎となるHTMLは以下の通りです。

上記のコードは見やすいよう空の行を設けてますが、詰めてしまっても問題ありません。

各項目(li class="menu")は、親項目(Parent Menu)と子項目(Child Menu)で構成されています。

後ほどCSSで、親項目をマウスカーソルで触れると、子項目の一覧(下層メニュー)が表示されるよう指定していきます。

子項目を増やしたい場合は<li><a href="#">Child Menu</a></li>を同列の階層に追加してください。

親・子を内包する項目ごと増やしたい場合は<li class="menu">~</li>をまるごと複製し、同列の階層に配置します。

2.CSSでメガメニューを作成

では、いよいよCSSでメガメニューを成形していきましょう。

細かいプロパティ・値の解説は省略し、大事なポイントだけ説明します。

まず、メニュー全体のスタイルのpositionrelativeに、下層メニューをabsoluteに指定し、親項目の直下に下層メニューを配置(32行目)します。

また、下層メニューにより多くのリンクを貼れるようwidthを100%に指定(30行目)し、heightの制限は設けませんでした。

さらにvisibilityhiddenに指定(37行目)し、下層メニューのデフォルトを非表示にしておきましょう。

そして最後に、マウスオーバー時に下層メニューが表示されるよう、親項目に:hoverをセッティングしvisibilityvisibleに切り替え(41行目)てください。

メガメニューのレスポンシブ対応

メガメニューはタブレット~PCの画面で利用する分には、サイトの利便性を高めるうえで有効です。

しかし、スマホほどの大きさの画面では、メガメニューはかえって使いにくいかもしれません。

メガメニューを実装するのであれば、同時にレスポンシブ対応への配慮も欠かさないほうが良いでしょう。

そこでこの章では、タブレット以上の画面ではメガメニューを、スマホ未満の画面ではハンバーガーメニューを表示させる方法を紹介します。

1.HTMLを追加

HTMLに関しては、前章で紹介したものとほとんど変わりありません。

しかし、冒頭に2行だけ追加してほしいコードがあります。

input type="checkbox"と言えば、チェックボックスを作るためのコードですが、いったいメニューとどんな関りがあるのでしょうか?

その理由もかねて、これからスマホ用のメニューを作成する方法をレクチャーしていきます。

2.CSSでスマホ用のハンバーガーメニューを作成

スマホ画面ではハンバーガーメニューを表示する

上図のように、3本線のボタンを配置したナビゲーションメニューのことを「ハンバーガーメニュー」と言います。

画面端に固定されたボタンをタップすると、メニュー一覧が表示される仕組みになっており、主にスマホ用のWEBデザインに活用される手法です。

縦長に永遠と項目を羅列でき、また、どの位置からでもメニューを開閉できます。

そのため、メガメニューと同等な情報量であっても、利便性が損なわれる心配がありません。

CSSコードは以下の通りです。

今回はJavaScriptを使わないため、クリックイベントをチェックボックスで代行させています。

つまり「チェックされているか、否か」で、メニューの開閉を切り替えます。

HTMLでinputlabelを配置しているのは、CSSでクリックイベントを演出するためです。

チェック済みのスタイルは、疑似クラス:checkedで切り替えます。

チェック前はvisibility: hidden(33行目)でメニューを隠し、チェック後にvisibility: visible(47行目)で表示することで、クリックによるメニューの開閉を実装できます。

ちなみに、チェックボックス自体は最初から最後まで非表示(4行目)です。

ボタンの真ん中の「3本線」「×印」のアイコンは「Font Awesome」を利用しています。

Font Awesomeとは、WEBアイコンを簡易的なHTML・CSSで描画できるサービスです。

公式サイトで取得したCDNコードをhead内に導入しておくと、多彩なアイコンをいつでも手軽に配置できます。

また、CSSでは疑似要素としてアイコンを呼び出すことも可能です。

上記のコード(18~20行目)のようにfont-familyに「Font Awesome 5 Free」と明記したうえで、contentに各アイコンのUnicodeを指定します。

Unicodeは各アイコンページの以下の箇所に記載されているものをコピペしてください。

Font AwesomeのUnicode

content: "\f179"」のように、必ず文字列の頭にバックスラッシュを付けてください。

上記のCSSコードでは、項目を展開した時のスタイルとしてアイコンを「3本線(19行目)」から「×印(29行目)」へと切り替えています。

3.CSSでPC用のメガメニューを作成

今度は大きな画面用のメガメニューを作成していきます。

下記のようなメディアクエリ内にメガメニューのスタイルを記述していきます。

481px以上の画面で閲覧した場合に、メガメニューを表示するよう指定していますが、好みの数値に変更していただいても構いません。

上記の指定では、だいたいダブレット~PCの画面が当てはまるかと思います。

ちなみに、メディアクエリとメガメニューのスタイルは、必ず前節のハンバーガーメニューのスタイルよりも後ろに記載してください。

では、具体的にメガメニューのスタイルを作っていきましょう。

一部のスタイルにおいてハンバーガーメニューのプロパティ・値を継承しているため、上記のコード単体ではメガメニューは正常に機能しないので、ご注意ください。

重要なポイントに絞って解説します。

まず、スマホ画面用のボタンを非表示(6行目)にしましょう。

次に、メニュー全体のpositionrelativeにして固定を解除(10行目)してください。

また、メニュー全体のvisiblityhiddenのままなのでvisibleに戻します(14行目)。

一方、下層メニューをposition: absoluteに切り替え、親項目の直下に配置(38行目)したうえで、いったん隠します(43行目)。

そして、親項目に疑似クラス:hoverを設定し、マウスオーバー時にのみ下層メニューを表示(47行目)させます。

最後に文字色や背景色などを、好みに合わせて調整しましょう。

メガメニューにアニメーションを付けるには?

今度は下層メニューの開閉時の動きにアニメーションを付けてみたいと思います。

CSSのtransitionプロパティを使えば、JavaScriptを使わなくても簡単に「フェードイン」や「スライド」などのアニメーションを実装できます。

今まで紹介してきたコードにほんの少し修正・追記を加えるだけなので、初心者の方も安心してください。

1.フェードインしながらドロップダウン

CSSアニメーションでメガメニューをフェードイン

マウスカーソルが親項目に触れた時、下層メニューがふわっと浮き出てくるのがわかるでしょうか。

このようにメガメニューをフェードインさせるには、下層メニューの表示/非表示のスタイルをvisibilityだけでなくopacity(不透明)と一緒に指定する必要があります。

追加してもらいたい箇所は以下の通りです。

transitionプロパティは、マウスオーバーイベントをどのぐらい時間をかけて実行させるか指定することができます。

最初の値(1s)が秒数で、二番目の値は適用させるプロパティ(opacity)です。

上記のコードでは、不透明度を1秒かけて最小から最大へと変化させるよう指定しています。

これにより親項目に触れることで、下層メニューが「完全に透明な状態」⇒「くっきり見える状態」へとフェードインします。

2.スライド(アコーディオン)しながらドロップダウン

CSSアニメーションでメガメニューをスライドさせる

または上図のように、親項目に触れるとスライドしながら表示させることも可能です。

前節で紹介したフェードインの効果と組み合わてアコーディオン風にしてみました。

このアニメーションを実装するには、CSSに以下のコードを修正・追記してください。

下層メニューを上から下へとフェードインさせるため、デフォルトのtopを0に、ホバー後のtopを100%に指定します。

また、transitionの値には複数のプロパティをカンマで区切って指定することが可能です。

ちなみに1.5s top, 2s opacityといった風に個別に秒数を指定できたりもします。

ただユーザビリティを考慮すると、アニメーションに時間をかけ過ぎてしまうのは、あまりよくありません。

使いやすさを最優先に考え、適度に調整してください。

まとめ

今回はHTML&CSSだけで「メガメニュー」を作る方法をレクチャーしました。

コーディングの手間はかかりますが、基本的に簡易的なCSSだけでレスポンシブからアニメーションの実装まで対応できそうですね。

メガメニュー単体でも構いませんが、できるだけレスポンシブ対応し、あらゆるユーザーの利便性に配慮したほうが良いでしょう。