CSS3トランスフォーム

CSS3トランスフォーム:transform

前回は、CSS3グラデーションにつきまして、ソースコードを交えながら記載いたしました。
グラデーションを指定する値および順序が、多少複雑ではありますが、これも慣れですね!また、慣れるまではご紹介いたしましたジェネレータで記載していくのもありかと思います。

今回はCSS3トランスフォームについて記載していこうかと思います。
transformプロパティは、要素に対して拡大・縮小、回転や移動に加え、歪などのさまざまな表現ができるプロパティになります。transformには2次元(2D)で処理できるものと、3次元(3D)で処理できるものがあり、それぞれtransform関数で指定します。また、3Dtransformを使う際にポイントとなる奥行の設定につきましても記載していこうと思います。

という事で、それでは今回はッ、

・transufomプロパティ
・rotate()回転
・scale()拡大・縮小
・skew()傾斜
・2D transformの基準点につきまして
・3D transformとperspective
・3D transformの基準点につきまして
・perspectiveプロパティ
・backface-visibilityプロパティ

上記について記載していこうと思います…。

transufomプロパティ

要素を変形させるための拡大・縮小や、回転、移動などはすべてtransformプロパティで指定をおこないます。transformで要素を変形させるには、関数を使って値を指定していくことになります。
この関数には2次元(2D)のものと、3次元(3D)のものがあり、3次元では奥行の設定や遠近効果の指定が可能になります。
transformプロパティはCSSアニメーションと併用した動きのある表現も可能で、デザインに応じたインタラクションを設定することもできます。また、スペースで区切ることで複数の値を指定することも可能です。

transformの使いどころとしては、サイトのナビゲーションやボタンへの使用のほか、ポラロイド風の写真をランダムに並べたコンテンツなどでよく見かけることがあります。また、コンテンツ全体を斜めにレイアウトするなど、大胆に設定してデザインに変化を付けることもできます。

2Dtransform関数

translate X軸・Y軸に沿った移動
translate() translateX() translateY()
rotate 回転
rotate()
scale 拡大・縮小
scale() scaleX() scaleY()
shew シアー(傾斜)
shew() shewX() shewY()
matrix 変形指定

3Dtransform関数

translate X軸・Y軸に沿った移動
translate() translate3d() translateX() translateY() translateZ()
rotate 回転
rotate() rotate3d() rotateX() rotateY() rotateZ()
scale 拡大・縮小
scale() scale3d() scaleX() scaleY() scaleZ()
shew シアー(傾斜)
shew() shewX() shewY()
perspective 遠近効果
matrix 変形指定
matrix() matrix3d()

rotate()回転

rotateは要素の回転を設定する関数で、時計回りで角度を記述します。特に中心点についての記述がない場合、回転の要素は要素の中心となります。紹介する例では20度(20deg)の回転を指定しました。
指定する数値にマイナス値を指定することで、反時計回りの回転を表現することもできます。

HTML<div class=”box1″><div class=”box2″>SAMPLE</div></div>
CSS.box1 {
margin: 45px 0 0 30px;
width:280px;
height:160px;
background:#97a6ff;
.box2 {
margin: 0;
width:280px;
height:160px;
text-align: center;
line-height:5em;
background:rgba(76,84,130,.5);
font-size:2em;
font-weight:bold;
color:#fff;
display: flex;
justify-content: center;
align-items: center;
transform: rotate(20deg);
}
SAMPLE

scale()拡大・縮小

要素の拡大・縮小を行うには、scaleで値を設定します。数値の指定はX軸とY軸の比率を記述しますが、ひとつのみの場合は双方とも同じ数値が指定されたと解釈されます。
ここでは最初の例にひとつの数値のみをしています。後の例ではX軸の割合は縮小させ、Y軸は拡大させるよう指定してみました。

※box1は前回同様のCSSで指定してあります。

CSS.box3 {
margin: 0;
width:280px;
height:160px;
text-align: center;
line-height:5em;
background:rgba(76,84,130,.5);
font-size:2em;
font-weight:bold;
color:#fff;
transform: scale(1.2);
}
SAMPLE
※box1は前回同様のCSSで指定してあります。

CSS.box4 {
margin: 0;
width:280px;
height:160px;
text-align: center;
line-height:5em;
background:rgba(76,84,130,.5);
font-size:2em;
font-weight:bold;
color:#fff;
transform: scale(0.7,1.2);
}
SAMPLE

skew()傾斜

skewは傾斜変形を扱うtransform関数になります。skew(X軸の傾斜、Y軸の傾斜)と記述しますが、X軸のみ記述している場合は、Y軸の傾斜はないものと解釈されます。skewY()、skewX()のように、X軸もしくはY軸の傾斜を個別に指定することも可能です。

X軸のみの傾斜

※box1は前回同様のCSSで指定してあります。

CSS.box5 {
margin: 0;
width:280px;
height:160px;
text-align: center;
line-height:5em;
background:rgba(76,84,130,.5);
font-size:2em;
font-weight:bold;
color:#fff;
transform: skew(15deg);
}
SAMPLE

Y軸のみの傾斜

※box1は前回同様のCSSで指定してあります。

CSS.box6 {
margin: 0;
width:280px;
height:160px;
text-align: center;
line-height:5em;
background:rgba(76,84,130,.5);
font-size:2em;
font-weight:bold;
color:#fff;
transform: skewY(15deg);
}
SAMPLE

2D transformの基準点につきまして

ここまでの例では、要素が変形する際の基準点を指定していないので、デフォルトの要素の中央(50%、50%の位置)となっています。基準点につきましては、transform-originで設定することが可能です。

※box1は前回同様のCSSで指定してあります。

CSS.box7 {
margin: 0;
width:280px;
height:160px;
text-align: center;
line-height:5em;
background:rgba(76,84,130,.5);
font-size:2em;
font-weight:bold;
color:#fff;
transform: rotate(15deg);
transform-origin:100% 100%;
}
SAMPLE

transform-originの値は、左上を基準としてX軸の距離とY軸の距離を指定します。この場合、要素の対して左上からX軸に100%の距離(右端)、Y軸に100%の距離(下端)となります。このように%で指定できるほか、left、right、top、bottomというキーワード指定や、pxでの細かな指定も可能になっています。

3D transformとperspective

3次元のtransformプロパティでは、2次元のX軸、Y軸の指定に加え、Z軸の指定が可能になっています。関数を2次元のものと比較してみると、3DやZ軸に関する指定が増えています。この場合のZ軸はブラウザ画面に対して手前に向かう距離を示す値となります。

perspectiveは、3Dtransformにおける重要な関数になります。これは要素から閲覧する地点までの距離を指定するもので、要素から距離が近いほど歪が大きくなります。

※box1は前回同様のCSSで指定してあります。

CSS.box8 {
margin: 0;
width:280px;
height:160px;
text-align: center;
line-height:5em;
background:rgba(76,84,130,.5);
font-size:2em;
font-weight:bold;
color:#fff;
transform: perspective(200px) rotateY(20deg);
}
SAMPLE

Y軸に20度の回転処理に加え、perspectiveを200pxとした場合の表示例です。奥行きが表現されるようになります。

3D transformの基準点につきまして

2Dtransformと同様、3Dの場合も基準点を指定することは可能です。この場合もtransform-originで指定しますが、3Dの場合は、デフォルトの状態だとX軸とY軸は要素の中心地点(50%、50%の位置)、Z軸については0と解釈されます。

※box1は前回同様のCSSで指定してあります。

CSS.box9 {
margin: 0;
width:280px;
height:160px;
text-align: center;
line-height:5em;
background:rgba(76,84,130,.5);
font-size:2em;
font-weight:bold;
color:#fff;
transform: perspective(400px) rotateY(20deg);
transform-origin: 100% 100% 0;
}
SAMPLE

Y軸に20度の回転を加え、perspectiveは200pxと指定した要素に基準点を設定しました。この場合、X軸に100%の距離の右端、Y軸は要素の下端、右下を基準として歪みが表現されます。

perspectiveプロパティ

3次元処理をする遠近効果は、transformの関数として使用するperspectiveとは別に、perspectiveプロパティと指定することも可能です。この場合は、子要素にのみ有効になるため、遠近効果を施したい要素の親要素にperspectiveを設定します。

HTML<div id=”container”>
<div class=”box1″>box1</div>
<div class=”box2″>box2</div>
</div>
CSS#container {
margin: 45px 0 0 30px;
width:400px;
height:160px;
background:
#97a6ff;
perspective:300px ;
}
.box1 {
margin: 0;
width:200px;
height:160px;
display: flex;
justify-content: center;
align-items: center;
background:rgba(76,84,130,.5);
font-size:2em;
font-weight:bold;
color:#fff;
transform:rotateY(50deg);
}
.box2 {
margin: -160px 0 0 200px;
width:200px;
height:160px;
display: flex;
justify-content: center;
align-items: center;
background:rgba(76,84,130,.5);
font-size:2em;
font-weight:bold;
color:#fff;
transform: rotateY(-50deg);
}
box1
box2

この例では、親のdiv要素にperspectiveを300pxと設定し、子要素の2つのdiv要素にはY軸の回転を50度加えました。分かりやすく両サイドが開いたような状態で表現するために、右側のボックスは、同じ角度でマイナスの値を付けてみました。

backface-visibilityプロパティ

backface-visibilityプロパティは、要素に回転などの変形を加えた際、その裏面を表示させるかを設定するプロパティで「visible」が表示、「hidden」で表示しない設定になります。
下記に分かりやすく表現したサンプルを記載いたします。

backface-visibilityサンプル

backface-visibility: visible; backface-visibility: hidden;
1
2
3
4
5
6

1
2
3
4
5
6

すべての面が透明、裏面 (2, 4, 5) が表面 (1, 3, 6) を通して表示されます。

背後の3面 (2, 4, 5) は非表示です。

という事で今回は、トランスフォームにつきまして、サンプルソースコードを交え記載いたしました。

実際の制作現場では、2Dtransformはたびたび使用することがございますが、3Dtransformはフラットデザインが主流の現在では、流石にあまり使用する機会はございません。しかしながら、使用することができるとワンポイントで目を引きたい時などには、特に有効なように感じますので、しっかりとまでは行かなくとも、覚えておきたいスキルのひとつかと思います。

とりあえず、今回はここまで…。

お仕事のご依頼は↓コチラより…、それではまた次回…。