menu
menu

キーワード検索

 

前月(10月)の人気記事トップ10

  1. ( 1-) 【CSS Tips】CSSだけでドロップダウンメニュー
  2. ( 2-) 【CSS Tips】CSSだけでサイズ可変・スマホ対応のアコーディオン
  3. ( 3-) 【HTML5】スマホサイトの作成・基本編
  4. ( 7↑) 【HTML5】HTML5・ページ作成の基本
  5. ( 6↑)【jQuery入門】jQueryで日時を表示
  6. ( 5↓) 【jQuery】表示しているブラウザの高さを取得してCSSのheightに指定
  7. ( 4↓) 【CSS Tips】CSSだけでブロック要素の表示非表示(トグルボタン)
  8. ( 8-) 【Mac Tips】MacにInkscapeをインストール
  9. ( 9-) 【MySQL】Windows 10にMySQLをインストール
  10. (10-) 【CSS Tips】スマホサイト向け横にスクロールするナビゲーション

【CSS Tips】CSSだけでドロップダウンメニュー

  • Labs

【CSS Tips】CSSだけでドロップダウンメニュー

こんにちは(・∀・)

CSSだけで作ってみましたシリーズです。今回はドロップダウンメニューをご紹介します。通常のドロップダウンメニューとtransitionプロパティで動きのあるドロップダウンメニューの横バージョンと縦バージョンの4タイプです。transitionプロパティはdisplayでの制御をサポートしていないため、子孫メニューの制御はoverflowで行っております。displayでの制御も可能ですが、その場合動きはなくなり、表示している矢印も表示されなくなります。

Contents

  1. 横並びドロップダウンメニュー
    通常のドロップダウンメニュー
    transitionプロパティで動きのあるドロップダウンメニュー
  2. 縦並びドロップダウンメニュー
    通常のドロップダウンメニュー
    transitionプロパティで動きのあるドロップダウンメニュー

1. 横並びドロップダウンメニュー

横並びで表示するドロップダウンメニューです。

① 通常のドロップダウンメニュー
HTML

<ul id="nav">
<li><a href="#">Home</a>
</li>
<li><a href="#">Strategy</a>
<ul>
<li><a href="#">b1</a></li>
<li><a href="#">b1</a>
<ul>
<li><a href="#">b2</a></li>
<li><a href="#">b2</a></li>
</ul>
</li>
</ul>
</li>
<li><a href="#">About</a>
<ul>
<li><a href="#">c1</a>
<ul>
<li><a href="#">c2</a></li>
<li><a href="#">c2</a></li>
</ul>
</li>
<li><a href="#">c1</a></li>
</ul>
</li>
<li><a href="#">Works</a>
<ul>
<li><a href="#">d1</a></li>
<li><a href="#">d1</a>
<ul>
<li><a href="#">d2</a></li>
<li><a href="#">d2</a>
<ul class="left">
<li><a href="#">d3</a></li>
<li><a href="#">d3</a></li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
<li><a href="#">Contact</a>
<ul>
<li><a href="#">e1</a>
<ul class="left">
<li><a href="#">e2-1</a></li>
<li><a href="#">e2-1</a></li>
</ul>
</li>
<li><a href="#">e1</a>
<ul class="left">
<li><a href="#">e2-2</a></li>
<li><a href="#">e2-2</a></li>
</ul>
</li>
</ul>
</li>
<!--nav--></ul>
<div class="content">
<p>通常の横並びドロップダウンメニューです。メニュー部分にマウスオーバーするとコンテンツの上に子メニューが展開します。</p>
<p>子孫メニューの制御ははoverflowで行っております。displayでの制御も可能ですが、その場合はcontentプロパティで表示している▶矢印は見えなくなります。</p>
</div>
CSS

#nav {
  width: 750px;
  height: 40px;
  margin: 0 auto;
  padding: 0;
  display: flex;
}
#nav li {
  position: relative;
  list-style: none;
}
#nav li a {
  display: block;
  width: 150px;
  height: 40px;
  text-align: center;
  color: #fff;
  font-size: 14px;
  line-height: 2.8;
  background: #9fb7d4;
  text-decoration: none;
}
#nav li a:hover {
  color: #fff;
  background: #afc6e2;
}
#nav > li li:hover > a {
  background: #afc6e2;
}
#nav li ul {/*子*/
  top: 40px;
  left: -40px;
  position: absolute;
}
#nav li ul li {
  overflow: hidden;
  height: 0;
}
#nav li ul li a {
  border-top: 1px solid #fff;
}
#nav li:hover > ul > li {
  overflow: visible;
  height: 40px;
}
  #nav li ul li ul {/*孫*/
    top: 0;
    left: 110px;
  }
  #nav li ul li ul:before {/*子▷*/
    position: absolute;
    content: "";
    top: 15px;
    left: 30px;
    border: 5px solid transparent;
    border-left: 5px solid #fff;
  }
  #nav li ul li ul li:hover > a,/*孫*/
  #nav li ul li ul li ul li:hover > a {/*ひ孫*/
    background: #afc6e2;
  }
  #nav li ul li ul.left {/*孫左*/
    top: 0;
    left: -190px;
  }
  #nav li ul li ul.left:before,/*子左▷*/
  #nav li ul li ul li ul.left:before {/*孫左▷*/
    position: absolute;
    content: "";
    top: 15px;
    left: 190px;
    border: 5px solid transparent;
    border-right: 5px solid #fff;
  }
  #nav li ul li ul.left li:hover > a,/*孫*/
  #nav li ul li ul li ul.left li:hover > a {/*ひ孫*/
    background: #afc6e2;
  }
.content {
  width: 750px;
  height: 200px;
  background: #eee;
  margin: 0 auto;
  padding: 10px;
  text-align: left;
  box-sizing: border-box;
}
Result

サンプルデモはこちら

② transitionプロパティで動きのあるドロップダウンメニュー
HTML

<ul id="nav">
<li><a href="#">Home</a>
</li>
<li><a href="#">Strategy</a>
<ul>
<li><a href="#">b1</a></li>
<li><a href="#">b1</a>
<ul>
<li><a href="#">b2</a></li>
<li><a href="#">b2</a></li>
</ul>
</li>
</ul>
</li>
<li><a href="#">About</a>
<ul>
<li><a href="#">c1</a>
<ul>
<li><a href="#">c2</a></li>
<li><a href="#">c2</a></li>
</ul>
</li>
<li><a href="#">c1</a></li>
</ul>
</li>
<li><a href="#">Works</a>
<ul>
<li><a href="#">d1</a></li>
<li><a href="#">d1</a>
<ul>
<li><a href="#">d2</a></li>
<li><a href="#">d2</a>
<ul class="left">
<li><a href="#">d3</a></li>
<li><a href="#">d3</a></li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
<li><a href="#">Contact</a>
<ul>
<li><a href="#">e1</a>
<ul class="left">
<li><a href="#">e2-1</a></li>
<li><a href="#">e2-1</a></li>
</ul>
</li>
<li><a href="#">e1</a>
<ul class="left">
<li><a href="#">e2-2</a></li>
<li><a href="#">e2-2</a></li>
</ul>
</li>
</ul>
</li>
<!--nav--></ul>
<div class="content">
<p>transitionプロパティで動きのある横並びドロップダウンメニューです。メニュー部分にマウスオーバーするとコンテンツの上に子メニューが展開します。</p>
<p>transitionプロパティはdisplayでの制御をサポートしていないため、子孫メニューの制御はoverflowで行っております。displayでの制御も可能ですが、その場合動きはなくなります。</p>
</div>
CSS

#nav {
  width: 750px;
  height: 40px;
  margin: 0 auto;
  padding: 0;
  display: flex;
}
#nav li {
  position: relative;
  list-style: none;
}
#nav li a {
  display: block;
  width: 150px;
  height: 40px;
  text-align: center;
  color: #fff;
  font-size: 14px;
  line-height: 2.8;
  background: #9fb7d4;
  transition: 0.5s;
  text-decoration: none;
}
#nav li a:hover {
  color: #fff;
  background: #afc6e2;
}
#nav > li li:hover > a {
  background: #afc6e2;
}
#nav li ul {/*子*/
  top: 40px;
  left: -40px;
  position: absolute;
}
#nav li ul li {
  overflow: hidden;
  height: 0;
  transition: 0.2s;
}
#nav li ul li a {
  border-top: 1px solid #fff;
}
#nav li:hover > ul > li {
  overflow: visible;
  height: 40px;
}
  #nav li ul li ul {/*孫*/
    top: 0;
    left: 110px;
  }
  #nav li ul li ul:before {/*子▷*/
    position: absolute;
    content: "";
    top: 15px;
    left: 30px;
    border: 5px solid transparent;
    border-left: 5px solid #fff;
  }
  #nav li ul li ul li:hover > a,/*孫*/
  #nav li ul li ul li ul li:hover > a {/*ひ孫*/
    background: #afc6e2;
  }
  #nav li ul li ul.left {/*孫左*/
    top: 0;
    left: -190px;
  }
  #nav li ul li ul.left:before,/*子左▷*/
  #nav li ul li ul li ul.left:before {/*孫左▷*/
    position: absolute;
    content: "";
    top: 15px;
    left: 190px;
    border: 5px solid transparent;
    border-right: 5px solid #fff;
  }
  #nav li ul li ul.left li:hover > a,/*孫*/
  #nav li ul li ul li ul.left li:hover > a {/*ひ孫*/
    background: #afc6e2;
  }
.content {
  width: 750px;
  height: 200px;
  background: #eee;
  margin: 0 auto;
  padding: 10px;
  text-align: left;
  box-sizing: border-box;
}
Result

サンプルデモはこちら

2. 縦並びドロップダウンメニュー

縦並びで表示するドロップダウンメニューです。

① 通常のドロップダウンメニュー
HTML

<div id="contents">
<ul id="nav">
<li><a href="#">Home</a></li>
<li><a href="#">Strategy</a>
<ul>
<li><a href="#">b1</a></li>
<li><a href="#">b1</a>
<ul>
<li><a href="#">b2</a></li>
<li><a href="#">b2</a></li>
</ul>
</li>
</ul>
</li>
<li><a href="#">About</a>
<ul>
<li><a href="#">c1</a></li>
<li><a href="#">c1</a></li>
</ul>
</li>
<li><a href="#">Works</a>
<ul>
<li><a href="#">d1</a></li>
<li><a href="#">d1</a>
<ul>
<li><a href="#">d2</a></li>
<li><a href="#">d2</a></li>
</ul>
</li>
</ul>
</li>
<li><a href="#">Contact</a>
<ul>
<li><a href="#">e1</a></li>
<li><a href="#">e1</a>
<ul>
<li><a href="#">e2</a></li>
<li><a href="#">e2</a></li>
</ul>
</li>
</ul>
</li>
<!--nav--></ul>
<div class="content">
<p>通常の縦並びドロップダウンメニューです。メニュー部分にマウスオーバーするとコンテンツの上に子メニューが展開します。</p>
<p>子孫メニューの制御ははoverflowで行っております。displayでの制御も可能ですが、その場合はcontentプロパティで表示している▶矢印は見えなくなります。</p>
</div>
<!--contents--></div>
CSS

#contents {
  overflow: hidden;
  width: 750px;
  height: 300px;
  margin: 0 auto;
  padding: 0;
  box-sizing: border-box;
  display: flex;
}
#nav {
  width: 150px;
  margin: 0;
  padding: 0;
}
#nav li {
  position: relative;
  width: 150px;
  height: 40px;
}
#nav > li {
  border-bottom: none;
}
#nav li:last-child {
  border-bottom: none;
}
#nav li:hover > ul > li {
  border-bottom: none;
}
#nav li > ul > li:last-child {
  border-bottom: none;
}
#nav li a {
  display: block;
  width: 150px;
  height: 40px;
  color: #fff;
  font-size: 14px;
  line-height: 2.8;
  padding: 0 5px;
  background: #9fb7d4;
  border-bottom: 1px solid #fff;
  box-sizing: border-box;
  text-decoration: none;
}
#nav li a:hover {
  color: #fff;
  background: #afc6e2;
}
#nav > li:hover > a {
  background: #afc6e2;
}
#nav > li:hover li:hover > a {
  background: #afc6e2;
}
#nav li:hover > ul > li {/*子・孫*/
  overflow: visible;
  top: -40px;
  left: 110px;
  height: 40px;
}
#nav li ul li {/*子・孫*/
  overflow: hidden;
  height: 0;
  left: 110px;
  list-style: none;
}
#nav li ul li a {
  background: #9fb7d4;
}
#nav li ul:before {/*孫*/
  position: absolute;
  content: "";
  top: 14px;
  left: 140px;
  border: 5px solid transparent;
  border-left: 5px solid #fff;
}
#nav li:hover ul li ul li:hover > a {/*孫*/
  background: #afc6e2;
}
.content {
  width: 600px;
  height: 250px;
  background: #eee;
  margin: 0;
  padding: 10px;
  text-align: left;
  box-sizing: border-box;
}
Result

サンプルデモはこちら

② transitionプロパティで動きのあるドロップダウンメニュー
HTML

<div id="contents">
<ul id="nav">
<li><a href="#">Home</a></li>
<li><a href="#">Strategy</a>
<ul>
<li><a href="#">b1</a></li>
<li><a href="#">b1</a>
<ul>
<li><a href="#">b2</a></li>
<li><a href="#">b2</a></li>
</ul>
</li>
</ul>
</li>
<li><a href="#">About</a>
<ul>
<li><a href="#">c1</a></li>
<li><a href="#">c1</a></li>
</ul>
</li>
<li><a href="#">Works</a>
<ul>
<li><a href="#">d1</a></li>
<li><a href="#">d1</a>
<ul>
<li><a href="#">d2</a></li>
<li><a href="#">d2</a></li>
</ul>
</li>
</ul>
</li>
<li><a href="#">Contact</a>
<ul>
<li><a href="#">e1</a></li>
<li><a href="#">e1</a>
<ul>
<li><a href="#">e2</a></li>
<li><a href="#">e2</a></li>
</ul>
</li>
</ul>
</li>
<!--nav--></ul>
<div class="content">
<p>transitionプロパティで動きのある縦並びドロップダウンメニューです。メニュー部分にマウスオーバーするとコンテンツの上に子メニューが展開します。</p>
<p>transitionプロパティはdisplayでの制御をサポートしていないため、子孫メニューの制御はoverflowで行っております。displayでの制御も可能ですが、その場合動きはなくなります。</p>
</div>
<!--contents--></div>
CSS

#contents {
  overflow: hidden;
  width: 750px;
  height: 300px;
  margin: 0 auto;
  padding: 0;
  box-sizing: border-box;
  display: flex;
}
#nav {
  width: 150px;
  margin: 0;
  padding: 0;
}
#nav li {
  position: relative;
  width: 150px;
  height: 40px;
}
#nav > li {
  border-bottom: none;
}
#nav li:last-child {
  border-bottom: none;
}
#nav li:hover > ul > li {
  border-bottom: none;
}
#nav li > ul > li:last-child {
  border-bottom: none;
}
#nav li a {
  display: block;
  width: 150px;
  height: 40px;
  color: #fff;
  font-size: 14px;
  line-height: 2.8;
  padding: 0 5px;
  background: #9fb7d4;
  border-bottom: 1px solid #fff;
  box-sizing: border-box;
  text-decoration: none;
  transition: 0.5s;
}
#nav li a:hover {
  color: #fff;
  background: #afc6e2;
}
#nav > li:hover > a {
  background: #afc6e2;
  transition: 0.5s;
}
#nav > li:hover li:hover > a {
  background: #afc6e2;
}
#nav li:hover > ul > li {/*子・孫*/
  overflow: visible;
  top: -40px;
  left: 110px;
  height: 40px;
}
#nav li ul li {/*子・孫*/
  overflow: hidden;
  height: 0;
  left: 110px;
  list-style: none;
  transition: 0.2s;
}
#nav li ul li a {
  background: #9fb7d4;
  transition: 0.5s;
}
#nav li ul:before {/*孫*/
  position: absolute;
  content: "";
  top: 14px;
  left: 140px;
  border: 5px solid transparent;
  border-left: 5px solid #fff;
}
#nav li:hover ul li ul li:hover > a {/*孫*/
  background: #afc6e2;
}
.content {
  width: 600px;
  height: 250px;
  background: #eee;
  margin: 0;
  padding: 10px;
  text-align: left;
  box-sizing: border-box;
}
Result

サンプルデモはこちら


関連リンク

jQueryでドロップダウンメニュー

  • カテゴリー:Labs