どうも7noteです。transformを複数書く時は書き順に注意!!!
要素を回転、拡大縮小、傾斜、移動することできるtransform
ですが、複数指定することができます。
まずtransformで使える指定の種類は以下の通り。
書き方 | 指定方法例 | |
---|---|---|
移動 | translate | transform: translate(100px, 100px); |
回転 | rotate | transform: rotate(-45deg); |
伸縮 | scale | transform: scale(2, 2); |
傾斜 | skew | transform: 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](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.ap-northeast-1.amazonaws.com%2F0%2F661092%2Fb02cba0f-b5a6-57db-0d90-b3167b557097.png?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=3f85ef2c3fd9ab3d99c793e717ffe1d1)
/* パターン2 */
img {
transform: rotate(45deg) translate(100px, 100px);
}
![image.png](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.ap-northeast-1.amazonaws.com%2F0%2F661092%2Fe1495169-2863-5513-8117-d1e642689ad3.png?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=b13deea2a64312735e9da4635e3ac793)
どうでしょうか?
書き順によって、結果が変わってしまいます。
解説
これはcssの処理順が影響しているためです。
パターン1では先に100pxずつの移動をしてから要素を回転します。
逆にパターン2では先に回転した位置から100pxずつの移動をするので違う結果となります。
「パターン1の処理順」
translate(100px, 100px)からのrotate(45deg)。
![image.png](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.ap-northeast-1.amazonaws.com%2F0%2F661092%2Fb79247f7-a32c-799d-cba6-8a92490c697f.png?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=3ac704f966bc247391c6fa2b95b37cab)
![image.png](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.ap-northeast-1.amazonaws.com%2F0%2F661092%2Fb02cba0f-b5a6-57db-0d90-b3167b557097.png?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=3f85ef2c3fd9ab3d99c793e717ffe1d1)
「パターン2の処理順」
rotate(45deg)からのtranslate(100px, 100px)。
![image.png](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.ap-northeast-1.amazonaws.com%2F0%2F661092%2Fa03871d4-37e0-55bd-84b3-960d465ba9f8.png?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=ac7df5c9483174ec4c4bed5ec6c2e7d3)
![image.png](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.ap-northeast-1.amazonaws.com%2F0%2F661092%2Fe1495169-2863-5513-8117-d1e642689ad3.png?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=b13deea2a64312735e9da4635e3ac793)
(画像が45度回転しているので、右下に移動後、左下に移動することで、結果下方向に移動したことになっている。)
まとめ
・複数指定す際は半角スペースを空けて繋げる。
・また指定する順番には注意!左から順番に処理される。