【初心者向け】transformを複数指定したい時は書き順に注意!

【初心者向け】transformを複数指定したい時は書き順に注意!

どうも7noteです。transformを複数書く時は書き順に注意!!!

要素を回転、拡大縮小、傾斜、移動することできるtransformですが、複数指定することができます。

まずtransformで使える指定の種類は以下の通り。

書き方指定方法例
移動translatetransform: translate(100px, 100px);
回転rotatetransform: rotate(-45deg);
伸縮scaletransform: scale(2, 2);
傾斜skewtransform: skew(30deg, 30deg);

○ transformの正しい複数指定の方法

/* 正しいtransformの複数指定の方法 */
img {
  transform: translate(100px, 100px) rotate(-45deg);
}

transformを複数指定する場合は間を半角スペース空けます。
これが正しい複数指定の方法です。

× 間違った複数指定の方法

/* 間違った複数指定の方法 */
img {
  transform: translate(100px, 100px);
  transform: rotate(-45deg);
}
/* もしくは */
img {
  transform: translate(100px, 100px) , rotate(-45deg);
}

どちらも間違った書き方です。
もしこれを書いても前者の書き方ではtransformが上書きされrotate(-45deg)しか効きません。後者の場合はエラー扱いになり、cssが効きません

複数指定する場合は、順番に注意!!!

実際に見ていただきましょう。

/* パターン1 */
img {
  transform: translate(100px, 100px) rotate(45deg);
}
image.png
/* パターン2 */
img {
  transform: rotate(45deg) translate(100px, 100px);
}
image.png

どうでしょうか?
書き順によって、結果が変わってしまいます。

解説

これはcssの処理順が影響しているためです。
パターン1では先に100pxずつの移動をしてから要素を回転します。
逆にパターン2では先に回転した位置から100pxずつの移動をするので違う結果となります。


「パターン1の処理順」

translate(100px, 100px)からのrotate(45deg)

image.png

image.png

「パターン2の処理順」

rotate(45deg)からのtranslate(100px, 100px)

image.png
image.png


(画像が45度回転しているので、右下に移動後、左下に移動することで、結果下方向に移動したことになっている。)

まとめ

・複数指定す際は半角スペースを空けて繋げる
・また指定する順番には注意!左から順番に処理される。

おそまつ!