先日の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のみで拡大アニメーションエフェクトが必要になった際に是非。。。

サンプルファイルをダウンロードしたい方はこちらから