CSSのみでプルダウンメニューを作る

2007年11月30日 09:42

以前にふたつほどプルダウンメニューについて書きました。
▼参考エントリー

  1. 入れ子のプルダウンメニューを作る
  2. プルダウンメニューをさらに作り込んでみた


でも、IE対策としてJavascriptを併用したものでした。
が、なんとCSSのみでもIE6にまで対応したプルダウンメニューが実現できるとのことで、ちょっとサンプルを作ってみたのでアップしてみたり。

ユウさんに指摘されて、縦バージョンのサンプルも作成してみました。

▼サンプルはこちら
CSSのみでプルダウンメニューのサンプル
CSSのみでプルダウンメニューのサンプル(縦)

なぜCSSのみで実現できるのか理由までは分かっていませんが、これで動く、というところまで紹介したいと思います。

▼EntryMore▼

CSSソース

HTMLソース

このプルダウンメニューのポイントは、条件付コメントでIEとそれ以外のブラウザとでHTML自体を変更していること。
さらに、条件付きコメントをトリッキーにつかってIEのみ<a>の閉じタグを消す、という手法を使っています。
問題の部分は、
<!--[if IE 7]><!--></a><!--<![endif]-->
の部分ですね。
これにより、IE7とそれ以外のブラウザに<a>の閉じタグを読み込ませます。(IE6以下は除外)

さらに次の、
<!--[if lte IE 6]><table><tr><td><![endif]-->
でIE6以下に<table>タグを挿入します。(なぜかこのtableタグを入れないと正常に動きません)
同じように閉じタグもIE6以下に適用するよう条件付きコメントで付けたし完成です。

CSSについては、li:hover ulとa:hover ulを指定します。
IE6では、a要素以外は:hoverを実装していないためこう記述します。
上記の条件付コメントによる<a>タグをIE6以下にだけ読み込ませるのはこのためです。

こうすることで、IE6でもCSSのみでプルダウンメニューが実装できます。

トラックバックURL

http://css-eblog.com/cgi-bin/mt/mt-tb.cgi/52

コメント

1 - yan さん

これはいける!
と、思ったのですが、IE7で動かないようなんですが?
IE6やFirefoxでは問題なく動きますけど...
なぜIE7だけ??

2008年1月15日 22:35

2 - えど さん

>>yanさん
参考にしていただいたようでありがとうございます。

こちらで確認すると、IE7でも問題なく動いているのですが、
もしかしてスタンドアロン版のIE7などでテストされていませんか?
条件付コメントを使用しているので、スタンドアロン版の場合、
たまにその条件付コメントがうまく動かない場合があります。
もしスタンドアロン版を使用されている場合は、正規版で一度試してもらえますでしょうか?

そしてもし、正規版で試されている場合はそのIE7の細かいverなんかを教えてください。
こちらでできる範囲で確認したいと思います。

2008年1月16日 15:22

3 - yan さん

その後探求いたしましたら、原因がわかりました。
わけあって、ホ-ムページビルダーv8で開いたために、DOCTYPEが”HTML 4.01 Transitional”に書き換えられてしまったために起こった現象のようです。
”XHTML 1.0 Transitional”に戻すことで直りました。
お騒がせいたしましたm(_ _)m

2008年2月 1日 10:42

4 - えど さん

>>yanさん
原因がわかって、直ったようで安心しました。
確かに、ホームページビルダーは勝手に変更してしまうっていうのがあった気がします。
せめて確認くらいはほしいですよね・・。

ご意見ありがとうございました!

2008年2月 1日 11:37

5 - ユウ さん

はじめまして。
こちらのプルダウンはよさそう!と思い、設置をしていたのですが、CSSに関しては初心者の域をでないもので、どうしても横メニューにカスタマイズする方法がわかりません。
方法を教えていただけるとありがたいです。

2008年2月29日 11:04

6 - えど Author Profile Pageさん

>>ユウさん
コメントありがとうございます!
横メニューですね。確かに横のほうが重要ありそうですね・・。
ちょっと新しく作成したいと思うので、完成したらアップ致します(*'')

2008年2月29日 18:01

7 - えど Author Profile Pageさん

>>ユウさん
縦のプルダウンメニューサンプルを作ってみました。
メニューの隙間は、ページ内に書かれている.menu ul li { ... }の中のmargin-rightの値を変更することで調整が可能です。

2008年3月 3日 10:04

8 - ユウ さん

遅くなりましたが、ありがとうございます!!
今後使用させていただきたいとおもいます。
感謝です!

2008年3月10日 04:17

9 - はるみ さん

はじめまして。
このCSSだけでプルダウンメニューを作る妙技、以前に他でも見たことがあってずっと探していたのですが見つからず、助かりました!ありがとうございます。
ところでこの妙技とは直接関係ないのですが、プルダウンメニューのレイヤー構造がIE6、7で崩れているのがleftの位置を80pxより小さくするとわかります。「Photo」の下に潜ってしまっています。それからIE7では「Blog」と「Photo」間のマージンが他より余計に取られています。(margin-bottomを0にしてみて下さい)
このpositionセレクタ系のIEのバグ?(z-indexも無視?marginの解釈もおかしい?)と思われる現象は、javascriptを使ったポップアップメニューでも現れ、困っています。何か解決法をご存知ないでしょうか?プルダウンメニューを横並びにすればバレないのですが、重ねて使いたいシーンもあるので・・・。よろしくお願いします。

2008年5月16日 17:29

10 - えど Author Profile Pageさん

>>9 - はるみさん
コメントありがとうございます。
なるほど、微妙に崩れていましたか・・。
ちょっと時間があるときに調査してみます。
ご指摘ありがとうございました~!

2008年5月16日 18:07

コメントを投稿





承認されるまでコメントは表示されません。しばらくお待まちください。