カテゴリ:CSSテクニック 2009年1月14日 23:21
前回の「CSSだけで作るマウスオーバーでの画像の拡大」の応用として作ったサンプルです。
ただ、今回は少し収穫がありました。
a:hover を使っての、a 要素内の position の操作に関する新しい発見です。
▼EntryMore▼
さて、まずは以下のソースを見てください。
今回のサンプルの肝になるのは、a:hover の使い方です。
そもそも、:hover 自体は a タグ以外にも本来は使えるのですが、IE では正常に動作しないので a 要素でマークアップしています。
まず、離れた箇所に表示したい画像と、それのサムネイル画像を用意します。(サンプルでは 4 つ)
サンプルでは ul でマークアップしていますが、別にここは ul でなくても構いません。
問題となるのは、a タグ部分です。
この a タグの中にサムネイル用の画像と、離れた場所に表示したい画像のふたつを入れます。
そのあとで、離れた場所に表示する画像を非表示にします。(サンプルでは#imgHover ul li a .mainImageのdisplay: none;)
こうすることで、サムネイル画像だけが画面に表示されることになります。
そしてここからが重要かつ新発見したところです。
通常時は非表示になっている画像を、a タグにマウスオーバーしたときに表示されるギミックを実装します。
手順としては
の 2 点になります。
それ以外に大事な点としては、全体をくくっている div 要素(#imgHover)にposition: relative;を、#imgHover ul li a:hover .mainImageにposition: absolute;を指定します。
こうすることで、#imgHover が絶対配置の基準となります。
それ以外にも細かい指定がありますが、表示位置の部分なので説明は割愛します。(環境に応じて適宜変更してみてください)
ここまでで、マウスオーバーした際に画像が表示されるようになります。
さらに、全体をくくっている div 要素を基準としたことで、div 要素を基準とした、a タグから離れた場所にも画像を表示することが可能です。
さて、ここからが新発見した部分です。
手順 1 の #imgHover ul li a:hover に position: static; を指定するがそうです。
これを指定しないと、IE ではマウスオーバーしても画像が表示されません。
さらに、a:hover に指定するプロパティは hasLayout が適用されるプロパティでなければなりません。(例えば、height や zoom など)
ただ今回の場合、zoom などを使ってしまうとなぜかliに指定している float が崩れたため、「position: static;」を利用しています。
元々これを指定しなくても、a 要素のデフォルトは static なので意味のない指定になっていますが、これを適用することで float に影響を与えることなく、マウスオーバーでの画像表示が可能となるため、意味のない(影響のない)プロパティを指定して、今回のサンプルを実現しています。
またこのa:hoverに指定するプロパティですが、前回のエントリーでは a:hover にposition: relative;を指定していましたが、これも同様の理由からです。
さらに前回のサンプルでは、IE7 にも問題が発生し、後続するサムネイル画像の下に、拡大された画像がもぐりこんでしまう、という不具合の回避方法として上記プロパティを指定していました。
今回のケース以外でも、マウスオーバーによるアクションを作った際、下にもぐりこんでしまうような場合に、同じような指定をすることで改善される可能性があります。ぜひ、参考にしてみてください。
この記事のカテゴリー一覧を見る⇒CSSテクニック
トラックバックURL
コメント
1 - larkman さん
どうもです、ページ記事とは関係無いのですけど23日前から、えどさんのサイトに不具合があるようです。n
2009年1月17日 12:11
2 - えど
さん
>>1 - larkman さんどもです。nえ! 不具合ですか・・?nどこらへんがおかしくなってますか・・?(;´д`)
2009年1月17日 12:26
3 - larkman さん
Firefoxで何時も、見ているのですけど最近、「このページのスクリプトは処理に時間がかかっているか応答しなくなっています。今すぐスクリプトを停止するか、このまま処理を続行させるか選択してください。」と表示しますnで。。。今なんですけど、IEで、えどさんのサイト見ると、普通に見れます。n
2009年1月17日 14:39
4 - えど
さん
>>3 - larkman さんご報告ありがとうございます!nどうやら、jQueryが悪さをしていたようです;n別のverのものに入れ替えたらスクリプトの停止は起きなくなりました。n最近、もっぱらメインはGoogle Chromeなので、nこの現象に気づいていませんでした(;´д`)不具合を教えていただき助かりましたー!
2009年1月17日 16:26
5 - ともこ さん
プルダウンメニューと共に使わせて頂きました。カオスなCSSを書き散らしながら何とかサイトを作っているような者ですが、そんな私がいじっても動作してくれる、とても有り難い記述です(*´_`*)ありがとうございました。
2011年10月11日 16:26
6 - Kou さん
マウスオーバーの機能で
ようやく納得の行く情報にたどり着けました。
ありがとうございました!
2011年12月 8日 12:41
7 - えど
さん
>>Kouさん
コメントありがとうございます!
お役に立てたようでよかったです( *'▽')
2011年12月 8日 13:29