CSSで要素の変形 transform

CSSで要素の変形 transform
Image by 🎄Merry Christmas 🎄 from Pixabay

2021.01.20(更新日:2021.01.21)

昔はJSでゴニョゴニョしてたが、今はCSSが流行り。その方が所謂「ヌルヌル」動く。
ただベンダープレフィックスが付くと、途端に覚えが悪くなる。
「trance・・・なんだっけ?」まとめようっと。

この記事は1年以上経過しています。内容的に古い場合があります。

要素の変形は「transform」プロパティ

移動や拡大・縮小、回転など横方向(X軸)縦方法(Y軸)奥行き(Z軸)を指定して変形を行う。
ベンダープレフィックスは記載するとゴチャゴチャするので省くため、ここでまとめて記載しておく。
必要なら呪文の如く追加しておくれ。

-webkit-transform: 関数;
-ms-transform: 関数;
transform: 関数;

vendor prefixes: 2021.1 Autoprefixer last 4 version

ちなみに解除する方法は以下。

transform: none;

移動 - translate / translate3d

/* 個別に指定(値はpxや%など) */
transform: translateX(X軸方向の値);
transform: translateY(Y軸方向の値);
transform: translateZ(Z軸方向の値);

/* XY方向まとめて指定(2D) */
transform: translate(X軸方向の値, Y軸方向の値);

/* XYZ方向まとめて指定(3D) */
transform: translate3d(X軸方向の値, Y軸方向の値, Z軸方向の値);

3D系はGPUって言うのを使うらしい。ハード面はからっきしなので説明省略。指定順番はそれぞれ順守する。

回転 - rotate

rotateに使える単位は deg / grad / rad / turn円一周を基準として、どれだけ回転させるかを指定する。
時計回りで180度回転させるなら回転値は「180deg」となる。負の数だと逆回りになる。各単位は以下のサイトがわかりやすい。

/* 2D回転 */
transform: rotate(回転値);

/* 座標ごとに個別に指定(3D) */
transform: rotateX(X座標の回転値);
transform: rotateY(Y座標の回転値);
transform: rotateZ(Z座標の回転値);

/* XYZ座標まとめて指定(3D。各座標の値は「0〜1」) */
transform: rotate3d(X座標, Y座標, Z座標, 回転値);

正直3D回転まで行うこともそうないかと思うけど。どんなになるか想像つかない・・・

基本的には要素のド真ん中を基準に回転するが、その位置を変更する場合は以下。

/* 初期値は50% 50% 0 */
transform-origin: 値; /* 単体 */
transform-origin: X値 Y値; /* 2D */
transform-origin: X値 Y値 Z値; /* 3D */
  • 値・・・数値(px/emなど)、パーセント(%)もしくは「left/right/center/top/bottom」
  • X値・・・パーセント(%)もしくは「left/right/center」
  • Y値・・・パーセント(%)もしくは「top/bottom/center」
  • Z値・・・数値(px/emなど)

拡大・縮小 - scale

値は変形前を1として比率を指定。倍の大きさなら「2」、半分なら「0.5」と言う具合。

/* 個別に指定 */
transform: scaleX(X軸方向の値);
transform: scaleY(Y軸方向の値);
transform: scaleZ(Z軸方向の値);

/* 単一に指定(XとYが同等値) */
transform: scale(値);

/* XY方向まとめて指定(2D) */
transform: scale(X軸方向の値, Y軸方向の値);

/* XYZ軸まとめて指定(3D) */
transform: scale3d(X軸方向の値, Y軸方向の値, Z軸方向の値);

Z軸はぱっと想像出来ないので試しながらが吉。

傾斜(シアー変形) - skew

X、Y方向の2D指定のみ。skewに使える単位は deg / grad / rad / turn円一周を基準として、どれだけ回転させるかを指定する。各単位は以下のサイト参照。

/* 単一(X方向のみ) */
transform: skew(X方向の値);

/* X方向、Y方向 */
transform: skew(X方向の値, Y方向の値);

複数の指定をする場合

これは単純に半角スペースを空けて続けて指定する。変形は左から順におこなわれる。

/* 例:右方向に100px、下方向に200px、45度回転させて2倍の大きさにする */
transform: translate(100px, 200px) rotate(45deg) scale(2);

回転など行った際、中心位置が指定する順番で変化することに注意。
上の例の様にrotateの前にtranslateするのと、rotateしてからtranslateするのでは結果が変わると言うこと。