簡単!CSSだけで作るメガメニュー

  • CSS

最近よく見るメガメニューですが、簡単なものならCSSだけで実装できます。
まずは下記で動作をご確認ください。

デモ

ABOUTとCOMPANYにマウスを乗せるとメガメニューが開きます。

フェード

フェードイン・フェードアウトのアニメーションです。

See the Pen megaMenu by leo (@leo-trym) on CodePen.

アコーディオン

ちょっと工夫すればアコーディオンのような動きも可能です。

See the Pen megaMenuAcc by leo (@leo-trym) on CodePen.

サンプル

HTML

HTMLの構造は簡単です。
メインメニューの中にサブメニューが入ります。

<nav id="gnav">
  <ul>
    <li><a href="">HOME</a></li>
    <li class="toggle">
      <a href="">ABOUT</a>
      <div class="menu">
        <ul class="menu_inner">
          <li><a href="">ABOUT SUB 01</a></li>
          <li><a href="">ABOUT SUB 02</a></li>
          <li><a href="">ABOUT SUB 03</a></li>
        </ul>
        <ul class="menu_inner">
          <li><a href="">ABOUT SUB 04</a></li>
          <li><a href="">ABOUT SUB 05</a></li>
          <li><a href="">ABOUT SUB 06</a></li>
        </ul>
      </div>
    </li>
    <li><a href="">NEWS</a></li>
    <li class="toggle">
      <a href="">COMPANY</a>
      <div class="menu">
        <ul class="menu_inner">
          <li><a href="">COMPANY SUB 01</a></li>
          <li><a href="">COMPANY SUB 02</a></li>
          <li><a href="">COMPANY SUB 03</a></li>
        </ul>
      </div>
    </li>
    <li><a href="http://shopblog.onward.co.jp/brand/jpress-men" target="_blank">BLOG</a></li>
  </ul>
</nav>

CSS

メインメニューの:hover擬似クラスでサブメニューを表示します。

#gnav > ul {
  display: table;
  padding-left: 50px;
}
#gnav > ul > li {
  display: table-cell;
  margin-right: 2em;
}
#gnav > ul > li:hover {
  color: #fff;
  background-color: #19192b;
}
#gnav > ul > li:hover > a {
  color: #fff;
}
#gnav > ul > li:hover .menu {
  max-height: 9999px;
  opacity: 1;
}
#gnav > ul > li > a {
  display: block;
  padding: 25.5px 1em 15.5px;
  transition: all .2s ease-in;
}
#gnav > ul .menu {
  transition: all .2s ease-in;
  max-height: 0;
  opacity: 0;
  overflow: hidden;
  width: 100%;
  left: 0;
  text-align: center;
  position: absolute;
  background-color: #19192b;
}
#gnav > ul .menu .menu_inner {
  padding: 1em 0;
}
#gnav > ul .menu .menu_inner li {
  display: inline-block;
  margin: 0 .5em;
}
#gnav > ul .menu a {
  color: #fff;
}

CSSのアニメーションで display: none から display: block には出来ないので、
max-heightを使って表示非表示をコントロールしています。

Writer

ko

KO

誕生日に会社のみんなから『世界文学全集』をプレゼントしてもらった読書好きフロントエンド・エンジニアです。WordPressとMovableTypeが得意ですが、本当の特技は薪割りです。

Page Topへ