ホームページ作成/表示・非表示の切替 (HTML,CSS,JavaScript)

ドロップダウンメニューとは?HTML+CSSだけで簡単に作る方法(4ページ目)

ドロップダウンメニューとは?HTML+CSSだけでドロップダウンメニューを作る方法を解説。jQueryなどのJavaScriptは不要。リストの書き方(ul要素)を使って2階層以上のサブメニューも作れます。クリックせずにメニューを開閉できる、簡単でレスポンシブなメニューバーUIの作り方をサンプルと共にご紹介。

西村 文宏

執筆者:西村 文宏

ホームページ作成ガイド

1-C. 2段のドロップダウン機能を実現するCSSソース

それでは、メニュー項目の上にマウスポインタが載ったタイミングでサブメニューを表示するドロップダウン機能を作りましょう。このような機能でも、実現にJavaScriptは不要です。サブメニューを表示したり消したりする動作は、CSSだけで作れます。

CSSソース:
/* -------------------- */
/* ▼サブメニューの装飾 */
/* -------------------- */
ul.ddmenu ul {
   display: none;       /* ★1:標準では非表示にする */
   margin: 0px;         /* ★2:サブメニュー外側の余白(ゼロ) */
   padding: 0px;        /* ★3:サブメニュー内側の余白(ゼロ) */
   position: absolute;  /* ★4:絶対配置にする */
}

/* ---------------------------------- */
/* ▼サブメニューがある場合に開く処理 */   /* ※サブメニューが1階層しか存在しない場合の記述 */
/* ---------------------------------- */
ul.ddmenu li:hover ul {
   display: block;      /* ★5:マウスポインタが載っている項目の内部にあるリストを表示する */
}
どの行も記述は必須です。「★」印を付けた部分の意味を、以下に解説しておきます。
 
  • [★1] 標準ではサブメニュー(=ul要素の内側にあるul要素)を非表示にします。これは前ページでも書いた指定です。
  • [★2][★3] サブメニューはメインメニューにぴったりくっつく必要があります。そのため、外側・内側共に余白量をゼロにしています。
ドロップダウンメニューの作り方1B-2

サブメニューは、属するメインメニュー項目の真下に表示する必要がある



[★4] サブメニューは、それが属するメインメニュー項目の真下に表示されないと、サブメニューらしくは見えません。表示場所を(本来表示される位置とは関係なく)任意の場所にするため、positionプロパティに値「absolute」を指定して、絶対配置にしています。

絶対配置の基準になる要素は、この要素よりも上位(浅い)階層にある「positionプロパティに値relativeが指定されている要素」です。ここでは、前ページのCSSソースで「★3」部分に記述した「メインメニュー項目」が該当します。
 
メインメニュー項目にマウスポインタが載った際にだけサブメニューを開くポイント
上記ソースの「★5」の部分で、ドロップダウン機能(=サブメニューを動的に表示したり非表示にしたりする機能)を作っています。その部分のソースを1行で再掲すると以下の通りです。
ul.ddmenu li:hover ul {   display: block;   }
このCSSは、以下のような意味になります。
 
  • ul.ddmenu : class名に「ddmenu」が指定されたul要素の
  • li:hover : 内側にあるli要素にマウスポインタが載っているときに、
  • ul : その内側にあるul要素(=サブメニュー)を
  • display: block; : ブロックレベル要素として表示する。

これはつまり、「メインメニュー項目の上にマウスポインタが載っているときに、その項目に属するサブメニューを表示する」という動作になります。


表示例:
ここまでのソースを表示すると、下図のように見えます。サブメニューのある項目の上にマウスポインタを載せると、サブメニューが表示されます。マウスを外せばサブメニューは消えます。
 
ドロップダウンメニューの作り方1C-1

Step.1Cの段階で、マウスを載せるとサブメニューが動的に表示されたり消えたりするようになる



これだけでもドロップダウンメニューとして動作はしていますが、あまり見やすいとは言えません。そこで、サブメニュー項目間に区切り線を設けて見やすくするなどの装飾を加えてみましょう。次のページでは、サブメニュー部分を装飾するCSSソースの書き方をご紹介いたします。


【本記事(前半)の目次】
  • 前のページへ
  • 1
  • 3
  • 4
  • 5
  • 10
  • 次のページへ

あわせて読みたい

あなたにオススメ

    表示について

    カテゴリー一覧

    All Aboutサービス・メディア

    All About公式SNS
    日々の生活や仕事を楽しむための情報を毎日お届けします。
    公式SNS一覧
    © All About, Inc. All rights reserved. 掲載の記事・写真・イラストなど、すべてのコンテンツの無断複写・転載・公衆送信等を禁じます