| この記事の要点 |
|
transform プロパティとは
transform は CSS で要素を変形(移動・回転・拡大縮小・傾斜)させるためのプロパティです。レイアウトを再計算せず合成(compositing)レイヤーで処理されるため、アニメーションのパフォーマンスが非常に良好です。
基本構文
.box {
transform: translate(50px, 20px); /* x, y 移動 */
transform: rotate(45deg); /* 回転 */
transform: scale(1.5); /* 拡大 */
transform: skew(20deg, 0); /* 傾斜 */
}
/* 複数指定は左から順に適用される */
.combo {
transform: translate(50px, 0) rotate(30deg) scale(1.2);
}
2D 変形関数
| 関数 | 意味 | 例 |
|---|---|---|
translate(x, y) | x, y 方向に移動 | translate(20px, 30px) |
translateX(x) / translateY(y) | 個別に移動 | translateX(50%) |
rotate(angle) | 回転(deg / rad / turn) | rotate(0.25turn) |
scale(s) / scale(sx, sy) | 拡大縮小 | scale(0.8) |
scaleX(s) / scaleY(s) | 個別に拡大縮小 | scaleX(-1)(鏡像) |
skew(ax, ay) | 傾斜 | skew(15deg, 0) |
matrix(a,b,c,d,e,f) | 2D 変形行列直接指定 | 低レベル指定 |
3D 変形関数
| 関数 | 意味 |
|---|---|
translate3d(x, y, z) | 3 軸方向に移動 |
rotateX/Y/Z(angle) | 各軸まわりに回転 |
rotate3d(x, y, z, angle) | 任意軸まわりに回転 |
scale3d(sx, sy, sz) | 3 軸スケーリング |
perspective(d) | 視点距離 — 3D 効果の強さ |
matrix3d(...16値) | 3D 変形行列直接指定 |
/* カードを Y 軸でめくる */
.card {
perspective: 1000px;
}
.card-inner {
transition: transform 0.6s;
transform-style: preserve-3d;
}
.card:hover .card-inner {
transform: rotateY(180deg);
}
適用順序に注意
複数の変形関数を並べた場合、左から順に合成されます。translate → rotate と rotate → translate は結果が違います。
/* 「右に50px動かしてから45度回転」 */
.a { transform: translate(50px, 0) rotate(45deg); }
/* 「45度回転してから右に50px動かす」(回転後の右方向に移動) */
.b { transform: rotate(45deg) translate(50px, 0); }
transform-origin(変形の中心)
既定では要素の中央を基準に変形します。transform-origin で基準点を変えられます。
.box {
transform-origin: left top; /* 左上を基準に回転 */
transform: rotate(45deg);
}
.box2 {
transform-origin: 0 100%; /* 左下 */
transform: scale(2);
}
/* 3D の場合 z 座標も */
.box3 {
transform-origin: 50% 50% 100px;
}
パフォーマンスと GPU 合成
transform はブラウザのコンポジタスレッドで処理され、再レイアウト(reflow)・再描画(repaint)を引き起こしません。これにより 60fps の滑らかなアニメーションが実現できます。
| アニメ手段 | レイアウト | 描画 | 合成 | 速度 |
|---|---|---|---|---|
left / top | ○ | ○ | ○ | 遅い |
width / height | ○ | ○ | ○ | 遅い |
transform / opacity | × | × | ○ | 速い |
位置の移動もtop: 100px ではなく transform: translateY(100px) を使うほうが GPU 合成に乗ります。さらに will-change: transform を指定すると、ブラウザに事前にレイヤー生成を促せます(過度な指定はメモリを食うので注意)。
transition / animation との組み合わせ
/* hover で拡大 */
.btn {
transition: transform 0.2s ease-out;
}
.btn:hover {
transform: scale(1.05);
}
/* @keyframes で揺らす */
@keyframes shake {
0%, 100% { transform: translateX(0); }
25% { transform: translateX(-5px); }
75% { transform: translateX(5px); }
}
.shake { animation: shake 0.3s linear; }
よく使う実例
| 用途 | 指定例 |
|---|---|
| 中央寄せ(絶対配置) | top:50%; left:50%; transform:translate(-50%,-50%); |
| 画像鏡像 | transform: scaleX(-1); |
| 180° 反転 | transform: rotate(180deg); |
| ホバー浮き上がり | transform: translateY(-4px); |
| ローディングスピナ | animation: spin 1s linear infinite; |
注意点
transformはインライン要素には効かない。display: inline-block/block/flex等にする- 固定位置 (
position: fixed) の祖先に transform を指定すると、子のfixedはその transform 要素を基準にしてしまう(仕様) - テキストを
scale拡大するとぼやける(ラスタライズ後にスケール)— 重要文字はfont-sizeで指定 - 過度な
will-changeはメモリ消費増。必要な要素にだけ
関連
- トランスフォーム — 親カテゴリ
- animationプロパティ
- transition プロパティ
- transform-origin / perspective / transform-style
- will-change — GPU 合成ヒント
子ページ
子ページはありません
同階層のページ
- transformプロパティ
- transform-originプロパティ
人気ページ
- 1 Eclipseで「サーバーに追加または除去できるリソースがありません。」の原因と対処法
- 2 tomcat の起動 / 停止ログと catalina.log・catalina.out の違い
- 3 JavaScript で base URL を取得する方法|window.location.origin
- 4 YouTube Data API v3 エラー一覧|403・400・404 の原因と対処
- 5 Laravel エラー一覧|500/Blade/DB 接続/ルーティングの代表エラー
- 6 3Dグラフィックスとは|モデリング/レンダリング/主要ソフトウェア (Blender / Maya)
- 7 Spring Frameworkのアノテーション一覧
- 8 【Spring】@Valueアノテーションとは
- 9 CATALINA_HOME の確認方法 (Linux / Mac)
- 10 【Spring】@Autowiredアノテーションとは
最近更新/作成されたページ
- プロジェクトをTomcatプロジェクトとして認識させる方法 2026-10-07 22:32:50
- MySQLの1366 Incorrect string value|Laravelの文字コード・絵文字エラー 2026-10-07 21:54:03
- curlの証明書ホスト名不一致|旧エラー51・現行60の確認と対処 2026-10-07 21:54:03
- LaravelのMassAssignmentException|fillableの原因と安全な対処 2026-10-07 21:54:03
- Eclipse で Tomcat の起動ログがコンソールに出ない時の確認手順 2026-10-07 21:54:02
- MySQLにおける中央値(Median)の導き方(バージョン8未満) 2026-10-07 13:49:45
- getInputForward 2026-10-07 13:41:15
- JSONから配列に変換 2026-10-07 13:41:15
- ビューから値をモデルに格納しコントローラーで受け取る方法 2026-10-07 13:23:41
- Laravelのテーブル作成と定義変更|マイグレーション・up/down・注意点 2026-10-07 13:23:41
- NumPy 配列に要素を追加する方法 (append / concatenate) 2026-10-07 13:23:41
- MariaDB・MySQLで現在日時を取得する方法|NOW・タイムゾーン・保存型 2026-10-07 13:13:36
- 【django】テンプレートで定数を使用する方法 2026-10-07 13:10:15
- Spring BootにおけるApplication.propertiesの環境依存設定の分割方法 2026-10-07 12:09:35
- Not supported for DML operations【Springエラー】 2026-10-07 11:09:38