2022/06/25

CSSだけで出来るドロップダウンメニューを作ってみよう!

HP/ブログを作成しているとドロップダウンメニューの設置することが多いですよね。
私もメニューがグローバルナビゲーションに収まらくなりそうなので、実装しようと思い調べてみました。
今回はこのドロップダウンメニューをCSSのみで実装する方法を試してみました。

メニュー基本

以下のHTMLはメニュー、サブメニューの基本的なコードです。


 <ul class="gnav-menu">
  <li>
   <a>menu-1</a>
   <ul class="sub-menu">
    <li><a href="#">sub-menu-1</a></li>
    <li><a href="#">sub-menu-2</a></li>
    <li><a href="#">sub-menu-3</a></li>
   </ul>
  </li>
  <li>
   <a>menu-2</a>
   <ul class="sub-menu">
    <li><a href="#">sub-menu-1</a></li>
    <li><a href="#">sub-menu-2</a></li>
    <li><a href="#">sub-menu-3</a></li>
   </ul>
  </li>
  <li>
   <a>menu-3</a>
   <ul class="sub-menu">
    <li><a href="#">sub-menu-1</a></li>
    <li><a href="#">sub-menu-2</a></li>
    <li><a href="#">sub-menu-3</a></li>
   </ul>
  </li>
 </ul>

HTMLのコードでデフォルトCSS設定だと以下の表示になります。
これだと、当然見た目悪いですね。ここからいろいろ改善してみたいと思います。

メニューを横にならべたい

メニューを横にならべたいなら、display: flex を使用すればいいらしい、試してみた。
display:-webkit-flexは、iOS-Safariの7.0以降に対応するために追加してます。

.gnav-menu {
  display: -webkit-flex;
  display: flex;
}

マーカーを消したい

メニューを横にならべてみたが、マーカー表示は消したい。
以下の、list-style-type: none を指定すると消えました。
サブメニューも消したいので、同じく指定します。

.gnav-menu {
  display: -webkit-flex;
  display: flex;
  list-style-type: none;
}
.sub-menu {
  list-style-type: none;
}

サブメニューをフォーカスが当たった時に表示したい

メニューを横並び、サブメニューを表示出来たので、今度はメニューにフォーカスが当たった時にサブメニューを表示したいですね。

まず、サブメニューを最初は見えなくしてみようか。
サブメニューのにopacity(透過率)を 0% すれば、見えなくなりました。

.gnav-menu {
  display: -webkit-flex;
  display: flex;
  list-style-type: none;
}
.sub-menu {
  list-style-type: none;
  opacity : 0%;
}

ただ、これだけだと、見えなくなっただけで、フォーカスが当たった時に表示しませんね。
なので、hoverを追加して、フォーカスされたとき、sub-menuが表示するようにしてみました。

.gnav-menu {
  display: -webkit-flex;
  display: flex;
  list-style-type: none;
}
.sub-menu {
  list-style-type: none;
  opacity : 0%;
}
.gnav-menu:hover .sub-menu {
  opacity : 100%;
 }

メニュー配下のサブメニューだけフォーカスが当たった時に表示したい

フォーカスが当たった時に、サブメニューを表示するのは出来ましたが、すべてのサブメニューが表示されてしまいます。これだといまいちなので、フォーカスメニュー配下のサブメニューだけ表示したいですね。
.gnav-menu :hoverに li を追加して、その項目にフォーカスされたサブメニューとすることで実現できました。

.gnav-menu {
  display: -webkit-flex;
  display: flex;
  list-style-type: none;
}
.sub-menu {
  list-style-type: none;
  opacity : 0%;
}
.gnav-menu li:hover .sub-menu {
  opacity : 100%;
 }

プロフィール

管理者 HONDA

福島県出身

ITで商売を効率化したいが、ITが苦手、分からない方是非ご相談ください。50過ぎの「おっさん」です。そのほうが話しやすい方はお勧めします。

カテゴリ

美容

ファッション

お酒


西暦和暦干支年齢対応表


設定

時計表示

都道府県

ブックマーク1

ブックマーク2

ブックマーク3

プライバシーポリシー

はじめに

HONDA WORK SHOPでは、ご利用のユーザ様個人情報の取り扱いに細心の注意を払っております。

また当サイトではアフィリエイトプログラムを利用しております。

第三者配信事業者(Amazonアソシエイト、楽天アフィリエイト、A8.net)がCookie を使用して、サイト利用者が当サイトや他のサイトに過去にアクセスした際の情報に基づいて広告を配信します。

Google が広告 Cookie を使用することにより、サイト利用者が当サイトや他のサイトにアクセスした際の情報に基づいて、Google やそのパートナーは適切な広告をサイト利用者に対して表示します。

広告設定でパーソナライズ広告を無効にすることができます。

Cookieの利用について

Cookieは、当サイトや他サイトへのアクセスに関する情報が含まれており、多くのサイトで利用者に有益な機能を提供する目的で使用されています。

Cookieには、サイト利用者の個人情報(氏名、住所、メールアドレス、電話番号)は一切含まれません。

アクセス解析ツールについて

当サイトでは、アクセス解析ツール「Google Analytics」を利用しています。

「Google Analytics」はトラフィックデータの収集のためにCookieを使用しています。

このトラフィックデータは匿名で収集されており、個人を特定するものではありません。

この機能はCookieを無効にすることで収集を拒否することができますので、ご利用のブラウザ設定をご確認のうえ、拒否設定を行ってください。

本ポリシーの変更

当サイトは、個人情報に関して適用される日本の法令を遵守するとともに、本ポリシーの内容を適宜見直しその改善に努めます。

修正された最新のプライバシーポリシーは常に本ページにて開示されます。