二つの画像とCSSやjQueryで表現する3種類のロールオーバー
昔の記事ばかり参考にしているのですが、
ロールオーバーの仕方を今一度考えてみようと思います。
今回は、CSSを使っての方法2種類と、
jQueryを使っての方法の合計3つを紹介します。
imgを直接ロールオーバー
<img />で指定したイメージ画像を、
直接ロールオーバーする方法です。
HTMLソース
<p><a href="#"><img src="rollover.gif" alt="rollover" /></a></p>
今回のはボタンなどのイメージで使ってみる用に
p要素で囲んだimgのロールオーバーでやってみます。
CSS
img{ border: none; } p{ background:url(rollover_on.gif) no-repeat 0 0; display:block; width:235px; height:87px; } p a:hover { background-color:transparent; } p a:hover img{ visibility:hidden; }
プレビュー
この方法のいいところは、CSSでロールオーバーしているため、
JavaScriptが動かない環境でも動作する点である。
ボタンのロールオーバーなどで使用するのがいいかなと思う。
CSSの指定によっては、動作がずれる場合などもあるので、
他の要素と十分注意しながら指定したほうがいい。
画像置換でロールオーバー
画像置換でのロールオーバーは
背景画像を入れ替えるロールオーバー。
文字自体はCSSで消されるようにCSSで制御されている
HTMLソース
<p><a href="#">画像置換</a></p>
今回のはHTML部分は文字になっていて、
背景にてロールオーバー画像が埋め込まれている。
ポイントはa要素でwidthとheightを指定して、
displayをblockに指定している点でしょう。
文字の消し方は、text-indentで-9999pxを指定するだけ。
CSS
p{ width:235px; height:87px; text-indent:-9999px; background:url("rollover01.gif") top left no-repeat; } a{ display:block; width:235px; height:87px; text-indent:-9999px; background:url("rollover01.gif") top left no-repeat; } a:hover{ background:url("rollover01_on.gif"); }
プレビュー
この画像置換、CSSがONの状態で、画像を非表示にすると、
画像も文字も見えなくなってしまうという事態になる。
ユーザビリティ的に考えて、あまり用いないほうがよさそうである。
またSEO的に考えても、意図的に文字を消す行為が、
スパム行為としてとらえられて、
いつ減点されるかわからないので、
あまり使わないほうがやはり妥当だろう。
jQueryを使ってロールオーバー
最後はjQueryを使ってのロールオーバー。
jQueryを使うと、指定するのがとても楽で
しかもページ全体単位でも設定が可能なので
かなり重宝する方法だと思う。
JavaScriptを切った環境でも、ロールオーバーはしないが、
validで表示されるのも魅力一つといえる。
HTMLソース
<p><a href="#"> <img class="rollover" src="rollover.gif" alt="rollover" /> </a></p>
一つ違う点を上げるとしたら、
Domを扱いやすくするために、imgにclass指定をしておくことだ。
今回はclass="rollover"をつけた画像がロールオーバーするようになっている。
そして指定するのはCSSではなくてJavaScriptの方である。
JavaScript
$(document).ready(function(){ $("img.rollover").each(function() { var off = this.src; var dot = this.src.lastIndexOf('.'); var on = this.src.substr(0, dot) + '_on' + this.src.substr(dot, 4); $(this).hover( function() { this.src = on; }, function() { this.src = off; }); }); });
プレビュー
この方法は、JavaScriptを切ってしまっては動作しないが、
たとえ切っても通常の画像がvalid状態で表示可能なのが特徴。
HTMLにおいて、動作を表す部分はCSSではなく
JavaScriptなどで表現をするのが、
マークアップ的に一番妥当なのではないだろうか。
個人的に、最近はこの方法が一番多い。
どれを使うかは人それぞれ
一時画像置換をしている人はあまりいなかったようだが、
今でも画像置換でロールオーバーをさせている人は多くいる。
しかし、CSSで画面から文字を意図的に消すことが、
SEOやユーザビリティでデメリットとなることを忘れないで欲しい。
それらをふまえた上で、どれを使うかは人それぞれ。
ただ、動的な表現をする部分である以上、
個人的にはJavaScriptで表現する方法をおすすめする。