[CSS]transform-styleとかperspectiveに後ろ髪を引かれてたからやってみた

[CSS]transformとかperspectiveに後ろ髪を引かれてたからやってみた

天気悪いっすね下山です。
寝ても覚めても納期に追われてます。

CSS3から新登場のtransform-styleとかperspectiveが気になってまして・・・transform系はjQueryだろーが!とか思ってまして・・・食わず嫌いは良くないと思いましてね。
じゃあ写真とか回してみようじゃないってことでね。
CSS3辞典とか引っ張りだしたりgoogleセンセーに聞いてみたりしたわですよ。

最初で言っておきます。
きっと使い道はないと思うの・・・

demo

ではhtmlから


基本はdivの中に画像を2枚。
この画像に奥行きを付けてマウスオーバーで前後入れ替えるアクロバットをやってみようと。もちろん3Dですよ!オクサン!

でCSSは

.rollover {
    position: relative;
    width: 306px;
    height: 306px;
    display: block;
}
.front {
    z-index: 2;
    position: absolute;
}
.back {
    z-index: 1;
    position: absolute;
}
.ef_3d {
	width:500px;
	margin:100px auto;
}
.rollover {
    -webkit-perspective: 1600px;
    -moz-perspective: 1600px;
    -ms-perspective: 1600px;
    -o-perspective: 1600px;
    perspective: 1600px;
}

.box {
    width: 306px;
    height: 306px;
    -webkit-transform-style: preserve-3d;
    -moz-transform-style: preserve-3d;
    -ms-transform-style: preserve-3d;
    -o-transform-style: preserve-3d;
    transform-style: preserve-3d;
    -webkit-transition: 1s;
    -moz-transition: 1s;
    -ms-transition: 1s;
    -o-transition: 1s;
    transition: 1s;
}

.front {
    -webkit-transform: translate3d(0,0,150px);
    -moz-transform: translate3d(0,0,150px);
    -ms-transform: translate3d(0,0,150px);
    -o-transform: translate3d(0,0,150px);
    transform: translate3d(0,0,150px);
}

.back {
    -webkit-transform: rotateY(180deg) translate3d(0,0,150px);
    -moz-transform: rotateY(180deg) translate3d(0,0,150px);
    -ms-transform: rotateY(180deg) translate3d(0,0,150px);
    -o-transform: rotateY(180deg) translate3d(0,0,150px);
    transform: rotateY(180deg) translate3d(0,0,150px);
}

.rollover:hover .box {
    -webkit-transform: rotateY(180deg);
    -moz-transform: rotateY(180deg);
    -ms-transform: rotateY(180deg);
    -o-transform: rotateY(180deg);
    transform: rotateY(180deg);
}

長っ!

まずは

perspective: 1600px;

perspectiveプロパティはtransformを使用するときの奥行きを指定します。
今回みたいに3Dで回転させたりする際は奥行きがないとZ軸が生きてきません。
値は1以上で指定しますが、値が小さければ小さいほど遠近感が強くなり、大きければ大きいほど緩やかになります。

次に

transform-style: preserve-3d;

transform-styleプロパティは子要素をフラットに描画するか立体で描画するかを指定できます。
値はpreserve-3d(立体)とflat(フラット)があります。

transition: 1s;

transitionプロパティは時間効果を指定します。1秒で回転して!ってことです。

transform: translate3d(0,0,150px);

transformプロパティにtranslate3d(X.Y.Z)を指定すると各軸の交点からの距離を指定できます。
今回はZに150pxを指定してますので全面に150px突き出てる感じです。(もちろん視点に近づいてますから画像は実サイズよりも大きく表示されます。)
そして

transform: rotateY(180deg) translate3d(0,0,150px);

もう一枚の画像にこれを指定することによって180度回転させてZ軸150pxなので見た目は表の画像の裏にひっくり返って小さく表示されるわけです。(実際は隠れますので表示されません)

以上を適用したらマウスオーバーでboxごと180度回転させるだけです。

transform: rotateY(180deg);

ちなみにrotateYをrotateXとすると縦回転になりますが、.backのrotateYをrotateXにする必要がありますので気をつけて!

とりあえず「へーこんなこと出来るんだねー」的な理解で記事にしました。

な!使い道ないだろーが!