CSSのみでグローバルメニューのhover以外をぼかしてhover中ボタンを強調する

カテゴリ:CSSだけでアクションを作る 2010年1月19日 23:51

ul要素のぼかしエフェクト画像

今回のテクニックは、以前書いた ピュアCSSで実装する DKIR を応用した画像ボタンのロールオーバー効果 の応用版です。
なので HTML はいじらずに、CSS の変更だけで実現しています。

また、今回のテクニックは ul, li 要素に対して:hover擬似クラスを使って実現しているためIE6 は未対応です。が、IE6 でもマウスオーバーの効果は正常に動作するので、IE6 以外のモダンブラウザ向けに仕込んでおくといい感じです。いわゆる "プログレッシブ・エンハンスメント" ってやつですねw

▼EntryMore▼

今回のテクニックの肝はやはり前回同様、z-index のマイナス値による画像置換になります。
ただ、今回は "ul 要素に対して :hover 擬似クラスを使い、マウスオーバーしていないボタンを画像置換"しています。

HTML ソース

CSS ソース

解説

このテクニックの要は#menu:hover li a#menu:hover li imgの部分で、hover 時に a 要素の背景を非表示にし、かつ img 要素を ul 要素の背面に移動させることです。

こうすることで、#menu 内のボタンすべてが ul 要素の背景に隠れることになります。そしてこの ul 要素にぼかしをかけた画像を配置しておくことで ul 要素にマウスオーバーした段階でメニューがぼける、というわけです。

ただ、これだけだとどれをポイントしているか分からないので、#menu:hover li:hover aとすることで、ul:hover の中にある li:hover、つまり現在ポイントしている部分の a 要素の背景だけを復活させ、マウスオーバー処理を実現する、というわけです。そしてこれら ul:hover, li:hover は IE6 では対応していないためぼかしの部分は動作せず、マウスオーバー処理だけが実行されるため IE6 でも問題なくマウスオーバーの効果が得られる、というわけです。

ただ本当は、:not(:hover) が使えればもう少しスマートにできたんですが、あいにくとこれは IE ではいまだに対応してないのでややめんどくさい方法で実装しています。そのおかげで、IE7で動作するので、そこそこ使えるかなーなんて思ってます。

それから前回のものと同じ仕組で実現しているので、画像オフの場合でもアクセシビリティを保ったまま実装できる点もポイントです。最近は、IE6 でも問題がなく、でもモダンブラウザで見てる人だけにちょっとしたお楽しみ♪ 的な感じでこういったことを実装するのが結構好きだったりしますw

この記事のカテゴリー一覧を見る⇒CSSだけでアクションを作る

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

トラックバックURL

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