CSS Web制作

CSSだけ!メガニューの作り方【フェード・上からスライドあり】

2024年3月3日

※ 当サイトではアフィリエイト広告を利用しています

HTMLとCSSだけで、メガメニューって作れる?

メガメニューは、従来のドロップダウンメニューを拡張したもので、より多くの情報を整理して表示できる強力なナビゲーションツールです。

メガメニューの実装は実務でもよくありますが、1から作るとなるとちょっと面倒に感じるかも知れません。

しかし、HTMLCSSだけで簡単に作れるので、今回はその方法をサンプルを使って解説していきます。

じゅんぺいブログは、Web制作コーディングWordPress制作)の技術記事を中心に、約500記事公開しています。ぜひ他の記事も参考にしてみてください!
完全無料のプログラミングスクール『ZeroPlus Gate』
30日間でWeb制作を学べる無料のプログラミングスクールがこちら
いきなり数十万するプログラミングスクールは厳しい・・・という人のお試しに最適です。
現在は無料ですがいつ有料になるか分からないので、気になる方はお早めに👇
(有料になっていたらすいません🙇‍♂️)

\ 完全無料 /

ZeroPlus Gate公式サイト

毎日先着制!

メガメニューとは?

メガメニューは、マウスホバーまたはクリックによって、ドロップダウンメニューのように展開される大型のメニューです。

つまり、メガメニューはドロップダウンメニューの一種になります。

通常のドロップダウンメニューと比べて広いスペースを確保することで、階層化したページをグループごとに表示したり、写真やアイコンを使ったユーザビリティの高いメニューが作れるのが特徴です。

あわせて読みたい
CSSだけでドロップダウンメニューを作る方法【4種類のサンプル付き】
CSSだけでドロップダウンメニューを作る方法【4種類のサンプル付き】

続きを見る

 

CSSのみのメガニューの作り方

今回ご紹介するメガメニューは、レスポンシブは考慮していません。

開くメニューも最小限のものなので、実際にはもう少し複雑になるかと思います。

今回解説するのは、以下になります。

  • シンプルなメガメニュー
  • フェードで表示されるメガメニュー
  • 上からスライドで表示されるメガメニュー

上記3パターンで、それぞれ『メニュー幅・画面幅・任意の幅』で作成するので、全部で9種類となります。

 

共通のHTMLコード

それでは解説していきますが、HTMLの書き方は共通でこちらになります。

<header class="header">
  <nav class="header-nav">
    <ul class="header-list">
      <li class="header-item">
        <a href="#">HOME</a>
      </li>
      <li class="header-item">
        <a href="#">ABOUT</a>
        <div class="megaMenu">
          <ul class="megaMenu-list">
            <li class="megaMenu-item">
              <a href="#">About-01</a>
            </li>
            <li class="megaMenu-item">
              <a href="#">About-02</a>
            </li>
            <li class="megaMenu-item">
              <a href="#">About-03</a>
            </li>
          </ul>
        </div>
      </li>
      <li class="header-item">
        <a href="#">NEWS</a>
        <div class="megaMenu">
          <ul class="megaMenu-list">
            <li class="megaMenu-item">
              <a href="#">News-01</a>
            </li>
            <li class="megaMenu-item">
              <a href="#">News-02</a>
            </li>
            <li class="megaMenu-item">
              <a href="#">News-03</a>
            </li>
          </ul>
        </div>
      </li>
      <li class="header-item">
        <a href="#">CONTACT</a>
      </li>
    </ul>
  </nav>
</header>

メインメニューは4つで、メガメニューに対応しているのは、『ABOUT』と『NEWS』になります。

これから解説していきますが、コードを全部見たい人は、デモの左上にある『HTML / CSS』をクリックして下さい。

 

シンプルなメガメニュー(メニュー幅)

CSSの書き方はこちら。

.header {
  background-color: #214b8d;
}
.header-nav {
  display: flex;
  justify-content: center;
}
.header-list {
  display: flex;
  justify-content: center;
  position: relative;
}
.header-item:hover {
  background-color: #19192b;
}
.header-item a {
  color: #fff;
  display: block;
  padding: 20px;
}
.megaMenu {
  background-color: #19192b;
  left: 0;
  opacity: 0;
  position: absolute;
  text-align: center;
  visibility: hidden;
  width: 100%;
}
.megaMenu-list {
  padding-bottom: 30px;
  padding-top: 30px;
}
.megaMenu-item {
  display: inline-block;
}
/* メニューをhoverした時のスタイル */
.header-item:hover .megaMenu {
  opacity: 1;
  visibility: visible;
}

メガメニューは、最初opacity: 0;で透明にしています。

しかし、それだけでは透明になっているだけでクリックできてしまうので、visibility: hidden;でクリックできないようにしています。

そして、hoverした時に opacity: 1;visibility: visible;で表示します。

visibility: hidden;については、以下の記事を参照下さい。

あわせて読みたい
【CSS】display: noneとopacity: 0とvisibility: hiddenの違いを解説
【CSS】display: noneとopacity: 0とvisibility: hiddenの違いを解説

続きを見る

 

サンプル(デモ)

サンプルはこちら。

See the Pen
Untitled
by junpei (@junpei-sugiyama)
on CodePen.

 

シンプルなメガメニュー(画面幅)

CSSの書き方はこちら。

.header {
  background-color: #214b8d;
}
.header-list {
  display: flex;
  justify-content: center;
}
.header-item:hover {
  background-color: #19192b;
}
.header-item a {
  color: #fff;
  display: block;
  padding: 20px;
}
.megaMenu {
  background-color: #19192b;
  left: 0;
  opacity: 0;
  position: absolute;
  text-align: center;
  visibility: hidden;
  width: 100%;
}
.megaMenu-list {
  padding-bottom: 30px;
  padding-top: 30px;
}
.megaMenu-item {
  display: inline-block;
}
/* メニューをhoverした時のスタイル */
.header-item:hover .megaMenu {
  opacity: 1;
  visibility: visible;
}

 

サンプル(デモ)

サンプルはこちら。

See the Pen
Untitled
by junpei (@junpei-sugiyama)
on CodePen.

 

シンプルなメガメニュー(任意の幅)

CSSの書き方はこちら。

.header {
  background-color: #214b8d;
}
.header-list {
  display: flex;
  justify-content: center;
}
.header-item:hover {
  background-color: #19192b;
}
.header-item a {
  color: #fff;
  display: block;
  padding: 20px;
}
.megaMenu {
  background-color: #19192b;
  left: 0;
  margin: auto;
  opacity: 0;
  position: absolute;
  right: 0;
  text-align: center;
  top: 45px;
  visibility: hidden;
  width: 600px;
}
.megaMenu-list {
  padding-bottom: 30px;
  padding-top: 30px;
}
.megaMenu-item {
  display: inline-block;
}
/* メニューをhoverした時のスタイル */
.header-item:hover .megaMenu {
  opacity: 1;
  visibility: visible;
}

これは、メインメニューの幅より少し広くして、さらに少し上にしています。

 

サンプル(デモ)

サンプルはこちら。

See the Pen
Untitled
by junpei (@junpei-sugiyama)
on CodePen.

このように、少し崩したデザインは結構あります。

 

フェードで表示されるメガメニュー(メニュー幅)

『シンプルなメガメニュー(メニュー幅)』とCSSの違いは、こちらです。

.header-item {
  transition: background-color .3s;
}
.megaMenu {
  transition: opacity .3s, visibility .3s;
}

このコードを追記して、フェードさせます。

.header-itemはメインメニューの方です。

 

サンプル(デモ)

サンプルはこちら。

See the Pen
Untitled
by junpei (@junpei-sugiyama)
on CodePen.

 

フェードで表示されるメガメニュー(画面幅)

『シンプルなメガメニュー(画面幅)』とCSSの違いは、先ほどのメニュー幅のフェードと同じです。

.header-item {
  transition: background-color .3s;
}
.megaMenu {
  transition: opacity .3s, visibility .3s;
}

 

サンプル(デモ)

サンプルはこちら。

See the Pen
Untitled
by junpei (@junpei-sugiyama)
on CodePen.

 

フェードで表示されるメガメニュー(任意の幅)

『シンプルなメガメニュー(任意幅)』とCSSの違いは、先ほどのメニュー幅のフェードと同じです。

.header-item {
  transition: background-color .3s;
}
.megaMenu {
  transition: opacity .3s, visibility .3s;
}

 

サンプル(デモ)

サンプルはこちら。

See the Pen
Untitled
by junpei (@junpei-sugiyama)
on CodePen.

 

上からスライドで表示されるメガメニュー(メニュー幅)

CSSは、これまでと少し変わります。

変わるのはメガメニューの部分だけですが、こちらになります。

.megaMenu {
  background-color: #19192b;
  height: 0;
  left: 0;
  overflow: hidden;
  position: absolute;
  text-align: center;
  transition: height .3s;
  width: 100%;
}
/* メニューをhoverした時のスタイル */
.header-item:hover .megaMenu {
 height: 116px; /* メガメニューの高さ */
}

今回は最初に透過させるのではなく、height: 0;で高さを0にしているので、opacity: 0;visibility: hidden;はありません。

そしてメニューをhoverしたら、指定した高さになります。

 

サンプル(デモ)

サンプルはこちら。

See the Pen
Untitled
by junpei (@junpei-sugiyama)
on CodePen.

 

上からスライドで表示されるメガメニュー(画面幅)

メガメニューのCSSは、先ほどの『上からスライドで表示されるメガメニュー(メニュー幅)』と同じです。

 

サンプル(デモ)

サンプルはこちら。

See the Pen
Untitled
by junpei (@junpei-sugiyama)
on CodePen.

 

上からスライドで表示されるメガメニュー(任意の幅)

これも追記・削除するCSSは、これまでのスライドで表示されるメガメニューと同じです。

 

サンプル(デモ)

サンプルはこちら。

See the Pen
Untitled
by junpei (@junpei-sugiyama)
on CodePen.

まとめ

今回は、HTML・CSSだけで作るメガメニューをご紹介しました。

JavaScriptjQueryは不要なので、割と簡単に作れるかと思いますが、実務ではデザイン通りにするためにCSSを調整する必要があると思います。

今回ご紹介したサンプル(デモ)を元にして、デザイン通りにコーディングしてみましょう。

以上になります。

この記事が役に立ったと思ったら、シェアボタンからX(旧Twitter)などにシェアすると、いいねされてフォロワーが増えたりすることがあるよ!

 

  • この記事を書いた人

じゅんぺい

37歳からWeb制作とブログ開始。Web制作歴5年目でコーディングとWordPressオリジナルテーマ制作が中心。これまで120件以上を納品。当ブログ月間最高15万PVで、370記事以上はWeb制作の技術記事。コンテンツ販売→累計売上1200万円&1500部超え。X(旧Twitter)フォロワー7200人以上。2024年3月からブログの経験を活かしてライターとしても活動を開始。

-CSS, Web制作