• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:cssでロールオーバー設定した画像がoperaでは最初のロールオーバーでは非表示になります)

CSSでロールオーバー設定した画像がoperaでは最初のロールオーバーでは非表示になります

このQ&Aのポイント
  • CSSでロールオーバー設定した画像が、Operaブラウザでは最初のロールオーバーでは非表示になります。他のブラウザではきちんと表示されるのですが、Operaブラウザでは一度目にカーソルをロールオーバー指定した場所に置くと、hover用の画像が表示されず、元の画像も消えてしまいます。
  • CSSでロールオーバー設定した画像がOperaブラウザで一度目のロールオーバーでは非表示になり、二度目のロールオーバーで表示される問題が発生しています。他のブラウザでは問題なく表示されるため、Operaブラウザに特有の問題と思われます。
  • CSSのロールオーバー設定を使用して画像を表示する際に、Operaブラウザで初めてロールオーバーすると画像が非表示になる問題が発生しています。他のブラウザでは正常に表示されるため、Operaブラウザの仕様に対応する必要があります。

質問者が選んだベストアンサー

  • ベストアンサー
  • abril
  • ベストアンサー率69% (388/560)
回答No.1

サンプル画像で検証しました。確かにOpera9.61では初回のa:hoverの際にsample_ov.gifがうまく読み込まれない様です。 UA側の仕様だと思いますので、これを回避するには、コンテンツを表示する際に予めJavaScriptでsample_ov.gifをプリロードしておくか、画像置換の方法をちょっと変える、といった対策があるかと思います。 前者は「JavaScript 画像 プリロード」などのキーワードでググるとサンプルがわんさか出てきますので、後者の方法のみ。 これもよく見られるCSSによる画像置換の手法なのですが、offとonの画像を2つに繋げて一つの背景画像として読み込み、a:hoverの時にはbackground-positionプロパティで背景画像の描画開始位置をずらす事でロールオーバー効果を出す、というものです。 つまり、現在使用されているsample.gif(W212px×H102px)とsample_ov.gif(同サイズ)を縦に二つ繋げて、W212px×H204pxの一枚の画像にします。これを仮にsample2.gifとします。 ちなみに、今回の件には影響してませんが、CSSにちょっと間違いや無駄がありますので先にその点を。 #bnn0513 a { (省略) background-repeat:no-repeat 0 0;←"0 0"の値はbackground-repeatのものではなく、background-positionのものです。削除して下さい(以下全ての疑似クラスでも同様) } #bnn0513 a:link { (省略) background-repeat:no-repeat;←この指定は#bnn0513 aのセレクタで既に指定されているので省略できます。(以下全ての疑似クラスで同様) } 以上を含めた修正版です。 --------------------------------------------------------------------- (省略) #bnn0513 a { display: block; width: 212px; height: 102px; padding: 0; background: url(images/sample2.gif) no-repeat; } #bnn0513 a:link { background-position: 0 0; } #bnn0513 a:visited { background-position: 0 0; } #bnn0513 a:hover { background-position: 0 -102px; } (省略) --------------------------------------------------------------------- ※#bnn0513 a:linkと#bnn0513 a:visitedの指定はディフォルト値なので省略してもかまいません。a:hoverとの対比が分かり易い様に明示しただけです。 なお、本件の場合はa:active時の画像も変えられている様ですので、正確にはsample_on.gifも更に付け足したW212px×H306pxの画像が必要になると思います。その場合は、上記のa:hoverと同様の考え方で、上記画像を作った上で、 #bnn0513 a:active { background-position: 0 -204px; } と指定すればよろしいかと。 不具合ありましたら補足して下さい。

ky_qa0903
質問者

お礼

abril 様 お返事が遅れてすいません。 ご指摘ありがとうございます。 現在他の人が作ったCSSを修正している為、ポジションの記述の場所を勘違いしてしまいました。 "background-repeat:no-repeat 0 0;"の部分、修正致しました。 CSSでa:active時のボタンの見た目を変更できる方法が自分ではみつけられませんでしたが、abril 様の回答内容を読ませていただき、「その手があった!」とハッとさせられました。 ご提案、どうも有難うございました。

関連するQ&A