連載 :
ここまでできる!CSS3CSS3で作るナビゲーション
2011年11月17日(木)
CSS3で作るドロップダウンメニュー
次は、図3のようなサブメニューが表示されるドロップダウン型のナビゲーションを作ってみましょう。
図3:マージンとパディングの指定(クリックで拡大) |
HTMLは次のようになります。
[リスト09]HTMLソース(dropdown.html)
<ul id="nav"> <li> <a href="#">Home</a> </li> <li> <a href="#">Menu A</a> <ul> <li><a href="#">Menu A-01</a></li> <li><a href="#">Menu A-02</a></li> <li><a href="#">Menu A-03</a></li> </ul> </li> ~中略~ <li> <a href="#">Menu C</a> <ul> <li><a href="#">Menu C-01</a></li> <li><a href="#">Menu C-02</a></li> <li><a href="#">Menu C-03</a></li> </ul> </li> </ul>
メインメニューをul要素でマークアップし、navというID名を付けます。サブメニューは、ul要素を入れ子にします。
メインメニューを装飾する
メインメニューの装飾方法は、先のサンプル同様、リンクテキストはGoogle Web Fontsのフォントを利用、text-shadowで影を付け、gradientで背景のグラデーションを指定しています。float: left;で横並びにするのも先ほどと同様です。ここでのポイントは、position: relative;とし、サブメニューの基点を設定しておくことです。
[リスト10]CSSソース(dropdown.css)
#nav > li { width: 150px; margin: 0; padding: 0; list-style-type: none; float: left; position: relative; /* 基点を設定 */ ~略~ } #nav li a { display: block; padding: 13px 0; color: #ccc; text-decoration: none; text-shadow: -1px -1px 0 #000; font-size: 14px; border-right: 1px #4c4c4c solid; border-left: 1px #4c4c4c solid; height: 14px; font-family: 'Lobster Two', cursive; }
サブメニューの表示と非表示を切り替える
サブメニューの表示と非表示は、displayプロパティで切り替えます。通常時は、display: none;で非表示にしますが、カーソルホバー時には、display: block;で表示されるよう指定します。
配置する位置は、position:absolute;として親要素を基点に、上から40px、左から0pxの位置に配置します。また、重なりの順番がメインメニューの上になるよう、z-indexに大きめの値を入れています。
[リスト11]CSSソース(dropdown.css)
#nav ul { margin: 0; padding: 0; list-style-type: none; display: none; /* 非表示 */ position: absolute; /* 親要素を基点に配置 */ top: 40px; left: 0; z-index: 999; /* 最前面に配置 */ background: #fff; -moz-box-shadow: 2px 3px 3px #ccc; -webkit-box-shadow: 2px 3px 3px #ccc; box-shadow: 2px 3px 3px #ccc; } /* カーソルホバー時に表示 */ #nav li:hover ul { display: block; }
フキダシを作る
サブメニューのフキダシは、li要素の最初の子要素aの後に仮想コンテンツを挿入し、そこにボーダーのスタイルを指定して表現しています。左ボーダーと右ボーダーを5px幅で透明に、下ボーダーを10px幅で色を付けることで、三角形になります(図4)。これをフキダシに見える位置に配置して完成です。
図4:3辺のボーダーで三角形を作る |
[リスト12]CSSソース(dropdown.css)
#nav ul li:first-child > a:after { content: ''; position: absolute; left: 30px; top: -10px; width: 0; height: 0; border-left: 5px solid transparent; border-right: 5px solid transparent; border-bottom: 10px solid #fff; } #nav ul li:first-child a:hover:after { border-bottom-color: #0066cc; }
「CSS3で作るナビゲーション」サンプルプログラム
連載バックナンバー
Think ITメルマガ会員登録受付中
Think ITでは、技術情報が詰まったメールマガジン「Think IT Weekly」の配信サービスを提供しています。メルマガ会員登録を済ませれば、メルマガだけでなく、さまざまな限定特典を入手できるようになります。