[使える CSS テクニック] CSSで実現するプルダウンメニュー

No Photo

使える CSS テクニックの第 4 回は「CSS で実現するプルダウンメニュー」です。

確認ブラウザは IE7、Firefox2、Opera9、Safari3.1 です。
CSS のみでは IE6 対応が不可能ですが、IE の独自機能(DHTML)を併用することで IE6 でもプルダウンメニューを実現しています。

まずは、以下のサンプルをご覧ください。


このサンプルの HTML は以下のようになっています。


<ul id="pulldown-menu">

<li><a href="#">シーブレイン</a>
    <ul>
    <li><a href="http://c-brains.jp/">コーポレート</a></li>
    <li><a href="http://c-brains.jp/web-site/">WEBサイト制作</a></li>
    <li><a href="http://c-brains.jp/document/">マニュアル制作</a></li>
    <li><a href="http://c-brains.jp/localization/">ローカライズ</a></li>
    </ul>
</li>

<li><a href="#">検索エンジン</a>
    <ul>
    <li><a href="http://www.yahoo.co.jp">Yahoo! Japan</a></li>
    <li><a href="http://www.google.co.jp">Google</a></li>
    <li><a href="http://www.goo.ne.jp">Goo</a></li>
    <li><a href="http://www.excite.co.jp/">excite</a></li>
    <li><a href="http://www.biglobe.ne.jp">Biglobe</a></li>
    </ul>
</li>

<li><a href="#">週刊少年漫画</a>
    <ul>
    <li><a href="http://jump.shueisha.co.jp/">少年ジャンプ</a></li>
    <li><a href="http://www.shonenmagazine.com/">少年マガジン</a></li>
    <li><a href="http://www.websunday.net/">少年サンデー</a></li>
    </ul>
</li>

</ul>

非常にシンプルな HTML です。

CSS は以下です。


ul#pulldown-menu a {
        color: #FFFFFF;
        text-decoration: none;
}
ul#pulldown-menu a:link,
ul#pulldown-menu a:visited {
        background: #3366FF;
}
ul#pulldown-menu a:hover,
ul#pulldown-menu a:active {
        background: #FF9933;
}

ul#pulldown-menu li {
        float: left;
        position: relative;
        margin: 0 0.5em;
        width: 9em;
        height: 2em;
        font-weight: bold;
        line-height: 2em;
}
ul#pulldown-menu li a {
        display: block;
        width: 9em;
        height: 2em;
        text-align: center;
}

/* 下層のメニューを不可視に */
ul#pulldown-menu li ul {
        display: none;
}

/* 疑似要素 :hover で下層のメニューを可視に */
ul#pulldown-menu li:hover ul {
        display: block;
        position: absolute;
        z-index: 100;
}

ul#pulldown-menu li ul li {
        float: none;
        margin: 0;
        font-weight: normal;
}

通常状態では 2 階層目の ul を display: none; で不可視(ボックス非生成)にしています。
疑似クラスの :hover を 1 階層目の li に指定して、マウスオーバーすると下層の ul が可視(ボックス生成)されるようになっています。

ただし、この方法には問題があります。
IE6 では a 要素以外の疑似クラスが適用されないため、そのままでは IE6 でプルダウンが表示されません。

そこで、IE6 対策で以下のコンポーネントを使用しています。

IE 独自の behavior プロパティを使って、IE6 でも DHTML でプルダウンを実現します。

  1. 上記のサイトから「csshover.htc」をダウンロード
  2. サーバの任意の場所にダウンロードした htc ファイルを置く
  3. CSS に behavior プロパティを追加して、置いた htc ファイルまでのパスを既述(HTML からのパスになるので注意)

ul#pulldown-menu { /* IE6 対策 */
        behavior: url("csshover.htc");
}

ちょっとズルをしましたが、これでほとんどのモダンブラウザに対応したプルダウンメニューを作ることができます。

  • このエントリーをはてなブックマークに追加

この記事を読んだ人にオススメ