先日のCSS(CSS3)のみでスライド画像ギャラリーを作る方法に引き続き、
CSS(CSS3)のみで形成する、画像にマウスオーバーで拡大エフェクトをつける
ギャラリー的なもののサンプルを紹介してみます。
初めに完成サンプルから。
※動作環境は前回同様にWebkitブラウザのSafariやChromeのみです。
CSS3 HOVER SPREAD GALLERY【SAMPLE01】
サムネイル画像にマウスオーバーすると画像がスムーズに拡大します。
拡大後は画像に対してCSS3ドロップシャドウが付きます。
今回のHTMLソースは<ul>と<li>のリストで形成された
ごく単純なもの。
◆HTML <div id="contents"> <ul> <li><a href="#"><img src="img/photo01.jpg" width="200" height="150" alt=""></a></li> <li><a href="#"><img src="img/photo02.jpg" width="200" height="150" alt=""></a></li> <li><a href="#"><img src="img/photo03.jpg" width="200" height="150" alt=""></a></li> <li><a href="#"><img src="img/photo04.jpg" width="200" height="150" alt=""></a></li> </ul> </div><!--/#contents-->
リストの中にそれぞれ画像を4枚張っています。
これらの画像に対してCSSでマウスオーバー「:hover」で
アニメーション動作を付けます。
◆CSS /* ContentsArea -------------------------- */ #contents { margin: 0 auto; width: 450px; text-align: left; position: relative; } #contents ul { width: 450px; } #contents ul li { margin: 10px 10px; width: 200px; height: 150px; text-align: center; float: left; display: inline; } #contents ul li img { -webkit-transform:scale(1); position: absolute; opacity: 0.7; z-index: 10; } /* ClearFixElements -------------------------- */ #contents ul:after { content: ""; height: 0; clear: both; display: block; visibility: hidden; } /* CSS3 HoverAnimation -------------------------- */ @-webkit-keyframes hoverSpread { 0% {-webkit-transform:scale(1);opacity: 0.7;} 100% {-webkit-transform:scale(1.5);opacity: 1;} } #contents ul li img:hover { -webkit-animation-name: hoverSpread; -webkit-animation-duration: 0.7s; -webkit-animation-iteration-count: 1; -webkit-transform: scale(1.5); -webkit-box-shadow: 0 0 10px #000; opacity: 1; z-index: 20; }
最後の「CSS3 HoverAnimation」の部分で画像にマウスオーバーした際に
CSS3の「transform」プロパティを使って画像全体を拡大しています。
全体の構成これだけで、記述もたいして難しくなることなく
CSS3のみで拡大エフェクトをかけることができます。
このサンプルのエフェクトをもうちょっと遊んでみたパターンは次へ。
CSS3 HOVER SPREAD GALLERY【SAMPLE02】
CSS3の「rotateX」を使って、
マウスオーバーで画像を回転させながら拡大します。
このアクションについては上記【SAMPLE01】のHTMLと基礎部分のCSSは同じで
CSS3アニメーション部分のみ以下のように変更してあります。
◆CSS /* CSS3 HoverAnimation -------------------------- */ @-webkit-keyframes hoverSpread { 0% {-webkit-transform:scale(1) rotateX(0);-webkit-box-shadow: 0 0 0 #000;opacity: 0.7;} 40% {-webkit-transform:scale(1.2) rotateX(180deg);-webkit-box-shadow: 0 0 0 #000;opacity: 0.7;} 80% {-webkit-transform:scale(1.5) rotateX(0);-webkit-box-shadow: 0 0 10px #000;opacity: 0.7;} 100% {-webkit-transform:scale(1.5) rotateX(0);-webkit-box-shadow: 0 0 10px #000;opacity: 1;} } #contents ul li img:hover { -webkit-animation-name: hoverSpread; -webkit-animation-duration: 1s; -webkit-animation-iteration-count: 1; -webkit-transform: scale(1.5) rotateX(0); -webkit-box-shadow: 0 0 10px #000; opacity: 1; z-index: 20; }
ちょっとアニメーションがチラついてしまったり、
マウスオーバーのポイントが外れてしまったりすることがありますが…
jQuery無しでもこういった単純なエフェクトは
CSS3だけでも実装がさほど難しくなく組み込めます。
CSSのみで拡大アニメーションエフェクトが必要になった際に是非。。。