最近、CSSのみでの3D表現を実験的に行っているサイトを多々見かけます。
CSSでの3D表現はCSS3から追加となったプロパティ「transform」で実装可能となります。

そんな「transform」を使ってCSS3での3D的表現方法を実験してみたので
簡単なサンプルにて紹介してみます。

まずは動作サンプルから。
※「transform」プロパティも今現在Webkitブラウザのみの対応となっていることもあり、
 このサンプルの動作環境はSafariのみです!!!

CSS3 3D ROTATE

5枚の画像に角度を付け、
レイヤー風に重ね合わせた見た目を表現しています。

各画像にマウスオーバーすることで、
角度を回転させ画像を正常の角度で見るアニメーションが実行されます。(ギャラリー風)

内部構成について。
HTMLソースは単純なリストのみです。

◆HTML
<div id="contents">

<ul>
<li><a href="#"><img src="img/photo01.jpg" width="300" height="225" alt=""></a></li>
<li><a href="#"><img src="img/photo02.jpg" width="300" height="225" alt=""></a></li>
<li><a href="#"><img src="img/photo03.jpg" width="300" height="225" alt=""></a></li>
<li><a href="#"><img src="img/photo04.jpg" width="300" height="225" alt=""></a></li>
<li><a href="#"><img src="img/photo05.jpg" width="300" height="225" alt=""></a></li>
</ul>

</div><!--/#contents-->

画像一枚一枚を<li>で囲っている、
通常のリストの構成です。

これらのリストに対してCSS3「transform」で角度をつけたり、
「:hover」時のアニメーションを実装します。

CSSの記述は以下。

◆CSS
/* ContentsArea
-------------------------- */
#contents {
	margin: 0 auto;
	width: 300px;
	min-height: 450px;
	text-align: left;
}

#contents ul {
	width: 300px;
}

#contents ul li {
	width: 300px;
	min-height: 50px;
	list-style: none;
	position: relative;

	-webkit-perspective: 400;
	-webkit-transition-property: perspective;
	-webkit-transform-style: preserve-3d;
	-webkit-transition-duration: 0.5s;
}

#contents ul li img {
	-webkit-transform: rotateX(75deg);
	-webkit-transition-property: transform;
	-webkit-transition-duration: 0.3s;

	-webkit-box-shadow:0 3px 10px #888;

	top: -90px;
	left: 0;
	width: 300px;
	position: absolute;
	display: block;
	opacity: 0.7;
	z-index: 10;
}


/* CSS3 Hover 3D TurnAnimation
-------------------------- */
@-webkit-keyframes hoverTurn {
	0% {min-height: 50px;}
	100% {min-height: 225px;}
}

#contents ul li:hover {
	-webkit-animation-name: hoverTurn;
	-webkit-animation-duration: 0.3s;
	-webkit-animation-iteration-count: 1;

	min-height: 225px;
}

@-webkit-keyframes ImgRotate {
	0% {top: -90px; -webkit-transform: rotateX(75deg);opacity: 0.7;}
	100% {top: 20px; -webkit-transform: rotateX(0deg);opacity: 1;}
}

#contents ul li:hover img {
	-webkit-animation-name: ImgRotate;
	-webkit-animation-duration: 1s;
	-webkit-animation-iteration-count: 1;

	-webkit-transform: rotateX(0deg);
	-webkit-box-shadow: 0 0 10px #000;
	top: 20px;
	opacity: 1;
	z-index: 20;
}

「#contents ul li」で「transform-style:preserve-3d」等を指定し、
その中の画像「#contents ul li img」で傾き角度「transform: rotateX(75deg);」を指定しています。

「transform: rotateX」の指定は「transform: rotateY」とすることで
角度を設定する基準となるX軸、Y軸の変更が可能となります。

「:hover」の動作はリストに対しては高さ(最小値)の変化のみ
画像に対して角度を0℃に変化させることに加えて表示位置を若干調整しています。

仕組みについてはこんな感じになります。

リストと画像の2つに対して同時にアニメーションを付けているせいなのか
「:hover」時に画面がチラつくこともあります。(←原因解明できず…)

少々荒削りなサンプルになっているので
CSSでの3Dアニメーションの参考程度に留めておいてください。。。

CSS3の「transform」や「rotate」を使って
今後は3D表現をサイト内に盛り込んでいきたいものです。

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