99%CSSで作るプルダウンメニュー3
横型と縦型を組み合わせた2段階展開型の99%CSSでつくるプルダウンメニューを紹介します。
普通プルダウンはjavascriptメインで作るものですが、今回は限界まで使用を抑えています。
CSSの一つの到達点といえるでしょう。
しかし、自由にカスタマイズするにはかなりの熟練が必要です。
*2005.8.6追記*
実際に導入を考えている方はCSSプルダウン for カスタマイズ
を利用することをおすすめします。
テクニック使用後
やり方
1:HTMLを書く
HTMLはこんな感じになります。
<DIV id="menu">
<ul class="main">
<li class="off"onmouseover="this.className='on'" onmouseout="this.className='off'">
<A href="/">トップ</A>
<ol class="sub">
<li class="off2" onmouseover="this.className='on2'" onmouseout="this.className='off2'"><A href="/">あああああああ</A>
<ul class="sub-2">
<li><a href="#">サンプル1</a></li>
<li><a href="#">サンプル2</a></li>
<li><a href="#">サンプル3</a></li>
</ul>
</li>
<li class="off2" onmouseover="this.className='on2'" onmouseout="this.className='off2'"><A href="../index.html">いいい</A>
<ul class="sub-2">
<li><a href="#">サンプル4</a></li>
<li><a href="#">サンプル5</a></li>
<li><a href="#">サンプル6</a></li>
</ul>
</li>
</ol>
</li>
<li class="off"onmouseover="this.className='on'" onmouseout="this.className='off'">
<A href="/">インフォ</A>
<ol class="sub">
<li class="off2" onmouseover="this.className='on2'" onmouseout="this.className='off2'"><A href="/">ううう</A>
<ul class="sub-2">
<li><a href="#">サンプル1</a></li>
<li><a href="#">サンプル2</a></li>
<li><a href="#">サンプル3</a></li>
</ul>
</li>
<li class="off2" onmouseover="this.className='on2'" onmouseout="this.className='off2'"><A href="../index.html">えええ</A>
<ul class="sub-2">
<li><a href="#">サンプル4</a></li>
<li><a href="#">サンプル5</a></li>
<li><a href="#">サンプル6</a></li>
</ul>
</li>
<li class="off2" onmouseover="this.className='on2'" onmouseout="this.className='off2'"><A href="../index.html">おおお</A>
<ul class="sub-2">
<li><a href="#">サンプル7</a></li>
<li><a href="#">サンプル8</a></li>
<li><a href="#">サンプル9</a></li>
</ul>
</li>
</ol>
</li>
</ul>
</DIV>
HTML解説
もうソースが長すぎて説明は無理!ってことでしなくても良いですか?だめですか。そうですか。
基本的にはCSSプルダウン1、2でサブメニューを構築していたolタグの下に、更にul class="sub-2"を加えて2段階目のサブメニューを作っています。
2段階目のメニューが展開するようにサブメニューを構築するolのliタグにclass="off2"等を加えて展開するように仕込んでいます。
入れ子がかなり複雑になっているので、気をつけてください。
2:スタイルシートを書く
スタイルシートはこんな感じになります。量はかなり多めです。
/****全体位置の決定****/ DIV#menu{ position:absolute;/*△*/ width:100%;/*○*/ z-index:100;/*△*/ font-size:14px;/*△*/ background-color:#FFFFFF;/*○*/ } /****メインメニュー用スタイル****/ ul.main{ margin:0px;/*△*/ padding:0px;/*△*/ width:100%;/*○*/ position:relative;/*×*/ list-style:none;/*△*/ text-align:center;/*○*/ } /*通常時*/ .main li.off{ position:relative;/*×*/ float:left;/*×*/ height:1em;/*○*/ width:100px;/*○*/ overflow:hidden;/*×*/ border:1px solid #993300;/*○*/ } /*展開時*/ .main li.on{ float:left;/*×*/ overflow:hidden;/*×*/ width:100px;/*○*/ background-color:#FFFFD5;/*○*/ border:1px solid #993300;/*○*/ } .main>li.on{ overflow:visible;/*×*/ } /*リンクスタイル*/ .main a{ display:block;/*△*/ text-decoration:none;/*○*/ } .main a:hover{ background-color:#FFFFD5;/*○*/ } /****サブメニュー用スタイル****/ ol.sub{ margin:0px;/*△*/ padding:0px;/*△*/ position:relative;/*×*/ left:0.5em;/*○*/ top:0.5em;/*○*/ width:100%;/*○*/ border:1px solid #993300;/*○*/ border-bottom:0px solid #993300;/*○*/ background-color:#FFCCCC;/*○*/ list-style:none;/*△*/ text-align:left;/*○*/; } .sub li{ /*必要に応じて追加*/; } .sub a{ padding:2px 0px 2px 5px;/*○*/ display:block;/*△*/ width:115px;/*○*/ border-bottom:1px solid #993300;/*○*/ } .sub a:hover{ background-color:#FFFFFF;/*○*/ } /****2段階目サブメニューを展開する****/ /*通常時*/ .sub li.off2{ position:relative;/*×*/ width:100px;/*○*/ height:18px;/*○*/ overflow:hidden;/*×*/ border-bottom:1px solid #993300;/*○*/ } /*展開時 背景色は.sub a:hoverと同じにすると良い*/ .sub li.on2{ width:100px;/*○*/ height:18px;/*○*/ overflow:hidden;/*×*/ background-color:#FFFFFF;/*○*/ border-bottom:1px solid #993300;/*○*/ } .sub>li.on2{ overflow:visible;/*×*/ } /****2段階目サブメニュー用スタイル****/ ul.sub-2{ margin:0px;/*△*/ padding:0px;/*△*/ position:relative;/*×*/ left:100px;/*○*/ top:-20px;/*○*/ width:120px;/*○*/ border:1px solid #993300;/*○*/ border-bottom:0px solid #993300;/*○*/ list-style:none;/*△*/ } .sub-2 a{ padding:2px;/*○*/ display:block;/*△*/ width:116px;/*○*/ height:18px;/*○*/ background-color:#ccCCff;/*○*/ border-bottom:1px solid #993300;/*○*/ } .sub-2 a:hover{ background-color:#ECFFFF;/*○*/ }
CSS解説
ここまで量が増えてしまうと、もう、何が何だかわからないですね。
プルダウン1をベースに、プルダウン2のスタイルシートをoff2,on2,sub-2と書き換えて加えた感じとでもいいましょうか。
各プロパティの横に入れたコメントは変更の可否を表しています。 ○は変更可、△は変更非推奨、×は変更不可を表しています。 改造する際の一つの目安にしてください。
あとはご自身でいろいろ弄って研究してみてください。ただし、下手に弄ると訳が分からなくなること必至なので、バックアップは取っておいた方がいいですよ。
使いこなすための+α
背景画像を使用したり、ロールオーバーリンクと組み合わせることで、可能性は無限に広がります。
javascriptは使用していないに等しいので、CSSが分かる人なら容易に改造できるのが特徴です。 が、改造するのはかなり相当CSSに熟練していないと困難を極めるでしょう。
このテクニックを自在に操れるなら、もううちのサイトに来る必要はないでしょう。っていうぐらい高度なテクニックです。
動作保障はIE6以上、Opera7以上、firefoxのみです。他はどうなってるか知りません。 使うときはそこんとこよろしくです。