見出し画像

CSSの変形関連を掘り下げる

引き続き「HTML5プロフェッショナル認定試験」対策を兼ねた、多くを引用した個人の勉強ノートです。参考まで。どんどん追記予定。
知ってるつもりでも、意外に忘れてる&知らないことが多いCSS。今回は変形関連の事を復習していきます。

transformプロパティ

ご存知要素を変形させるためのプロパティで、モダンブラウザであれば特に問題なく使えるようになっています。変形は、移動、回転、伸縮、傾斜の4つが可能。スペースで空けて書くことで複数指定可能。

意外にものすごく大事なのは、position同様に「要素の幅や高さの実態は元の場所に残ったまま」です。

transform-originプロパティ

これら変形を行うにあたって、基準になる位置を指定します。単位付き数値またはワード(left center right top center bottom)で指定する。デフォルトは(50%,50%)なので中央です。

セレクタ名 {
   transform-origin:X軸の位置 Y軸の位置 Z軸の位置;
}

移動(transform)

X、Y、Zそれぞれに移動距離を指定できます。単位はpxで指定。

translate()関数でX軸とY軸の移動をまとめて指定できます。
translateX()関数、translateY()関数、translateZ()関数を使って個別に移動距離を指定することもできます。

コメント 2020-06-06 015353

<section>
    <div class="a">a</div>
    <div class="b">b</div>
    <div class="c">c</div>
</section>
  
.b{
 transform-origin:right top;
 transform: translateX(90px);
}

回転(rotate)

単純回転の他、移動同様にX、Y、Z軸の回転を指定できます。回転させる角度は、時計回りのdegで指定。

rotate()関数は、要素の回転を指定します。
rotateX()関数、rotateY()関数、rotateZ()関数
を使ってそれぞれの方向に対して回転を指定することもできます。
それぞれを続けて記述することで2D(XY方向)または3D(XYZ方向)の指定が可能です。
回転軸を3D(XYZ方向)で指定し、回転角度を指定できるrotate3d()関数があります。

rotateで単純回転の角度を指定した場合、前述のtransform-originで指定した位置に「ピンを指したように回転」することに注意(元の空間は残り、後続には重なる)

コメント 2020-06-06 023550

.b{
 transform-origin:right bottom;
 transform: rotate(60deg);
}

伸縮(scale)

translateやrotate同様、XYZ毎に指定できる他、まとめて記述できます。値は基準を1として数値のみで指定。

scale()関数でX軸とY軸の伸縮率をまとめて指定できます。
scaleX()関数、scaleY()関数、scaleZ()関数を使って個別に伸縮率を指定することもできます。
それぞれを続けて記述することで2D(XY方向)または3D(XYZ方向)の指定が可能ですが、3D(XYZ方向)をまとめて指定できるscale3d()関数があります。

このように基準を中心とした伸縮で、元のサイズの空間に影響しないので演出に便利。

コメント 2020-06-06 032024

.a{
 transform: scale(1.2);
 background:red;
}
.b{
 transform: scale(0.5);
 background:red;
}

傾斜(skew)

菱形のように、軸に傾斜をつけるもので、2D限定。傾斜角度の単位はdegで指定。

2D(XY方向)のみ指定できます。
skew()関数でX軸とY軸の傾斜角度をまとめて指定できます。
skewX()関数、skewY()関数を使って個別に傾斜角度を指定することもできます。

少し勘違いしやすい点は傾く方向で、その軸自体が傾くというより「その軸がどのくらいずれるか」という考え方。そのため例えばY軸のみ傾斜を与えると、縦軸は垂直に立ったまま上辺下辺が傾いています。

コメント 2020-06-06 030004

.a{
 transform: skewY(30deg);
}
.b{
 transform: skewY(45deg);
}

transform-styleプロパティ(親要素)

その変形が2次元なのか3次元なのかを指定する。デフォルトは2次元(flat)。3Dにする場合は下記のように設定。子要素に対する設定なので、親要素に記載。

セレクタ名 {
   transform-style:preserve-3d;
}

perspectiveプロパティ(親要素)

3D表示させる場合、子要素のZ軸の距離を設定できます。値は整数で単位はpxで指定。こうして深さを指定することで、立体的な遠近効果を作ることができます。

セレクタ名 {
   perspective:値px;
}

以下のように、子要素が一つの消失点に向かっているので、Y軸の回転与えると傾きがそれぞれ異なって見える。

コメント 2020-06-06 022424

section {

   transform-style:preserve-3d;
 perspective:200px;
}

div{
 transform-origin:right top;
 transform: rotateY(60deg);
}

perspective-originプロパティで、基点となるX軸とY軸の位置を指定も可能です。

以上です!何かすこしでも役に立てば嬉しいです。
コメントもお待ちしてます。

この記事が気に入ったらサポートをしてみませんか?