【第1回】jQueryを使わずにCSSでエフェクトありのロールオーバーを作ってみよう!
- 2015/12/10
jQueryを使わずにCSS3のキーフレームアニメーションを使ってエフェクト効果ありロールオーバーを作ってみます。
シリーズ1回目の今回はフェードの効果を付けるまで!
今回の目標
これが今回の制作目標です。最初に背景画像を切り替えるだけのエフェクトなしを作成し、続けてCSSアニメーションを使ってフェードしながら画像を切り替えるところまで行きます。。
※マウスを乗せると画像が切り替わります。
準備するもの
画像を2つ用意します。
基本のエフェクトなしバージョン
まずは、背景画像を切り替えるだけの基本のエフェクトなしバージョンから作ってみます。
※マウスを乗せると画像が切り替わります。
特別なことは何もしておらず、background-imageプロパティで背景画像を切り替えるだけです。
サンプルコード
<div class="box"> <p class="txt"><a href=""></a></p> </div>
<style type="text/css"> .box { width: 250px; height: 250px; } .txt { margin: 0; } .txt a { width: 250px; height: 250px; display: block; background-image: url(off.gif); } .txt a:hover { background-image: url(on.gif); } </style>
CSSアニメーションを使いエフェクト追加
CSSのキーフレームアニメーションを使って画像をフェードさせます。CSS3のアニメーションについてはコチラをどうぞ。
※マウスを乗せると画像が切り替わります。
HTML構造の変更
背景画像の切り替えではフェードの効果を実現できません。
そのため、背景画像の上にimg要素で画像を重ねて表示して、img要素の透明度を変更することでフェードの効果を実現します。
サンプルコード
<div class="box"> <p class="txt"><a href=""></a></p> <p class="img"><img src="off.gif"></p> </div>
<style type="text/css"> .box { width: 250px; height: 250px; background-image: url(on.gif); } .box p { position: absolute; width: 250px; height: 250px; margin: 0; } .txt a { position: absolute; display: block; width: 250px; height: 250px; z-index: 1; } @keyframes imgOn { 0% { opacity: 1; } 100% { opacity: 0; } } @keyframes imgOff { 0% { opacity: 0; } 100% { opacity: 1; } } .txt:hover + .img { animation: imgOn 0.5s 1 forwards; } .txt + .img { animation: imgOff 0.5s 1 forwards; } </style>