変形(拡大・縮小・回転・移動)
transformscalerotatetranslateskewmatrixperspective
CSSのtransformプロパティは、要素を移動・拡大縮小・回転・傾斜させます。レイアウトフローに影響を与えず、GPUで処理されるためパフォーマンスが高いです。
デモ:transform 関数一覧(ホバーで確認)
X軸移動
translateX(20px)Y軸移動
translateY(-15px)拡大
scale(1.3)縮小
scale(0.7)回転
rotate(30deg)X傾斜
skewX(15deg)Y傾斜
skewY(10deg)水平反転
scaleX(-1)デモ:3D カードフリップ(ホバー)
表面 😊
裏面 🎉
rotateY(180deg) + backface-visibility: hidden
3D回転
rotateX() + rotateY() 組み合わせ
デモ:transform-origin の違い(ホバーで回転)
top left
center(デフォルト)
bottom right
コード例
/* 基本的な transform 関数 */
.move { transform: translate(50px, 20px); }
.move-x { transform: translateX(50px); }
.move-y { transform: translateY(-20px); }
.big { transform: scale(1.5); }
.stretch { transform: scaleX(2) scaleY(0.5); }
.spin { transform: rotate(45deg); }
.slant { transform: skew(15deg, 5deg); }
/* 複数の変形を組み合わせる(右から左の順で適用) */
.combined {
transform: translateY(-10px) scale(1.1) rotate(5deg);
}
/* transform-origin — 変形の基点 */
.origin-custom { transform-origin: top left; }
.origin-percent { transform-origin: 25% 75%; }
.origin-px { transform-origin: 10px 20px; }
/* 3D transform */
.scene { perspective: 600px; } /* 親要素に設定 */
.card {
transform-style: preserve-3d; /* 子の3D変形を維持 */
backface-visibility: hidden; /* 裏面を非表示 */
transform: rotateY(180deg);
transform: rotateX(30deg) rotateY(45deg);
transform: rotate3d(1, 1, 0, 30deg); /* x,y,z軸ベクトル + 角度 */
}
/* 行列変換(高度な使用) */
/* matrix(scaleX, skewY, skewX, scaleY, translateX, translateY) */
.matrix { transform: matrix(1, 0.2, 0, 1, 10, 0); }NEW個別 transform プロパティ:scale / rotate / translate(2022)
従来は transform: scale(1.2) rotate(45deg) のように一つの transform に全部書く必要がありました。 これを個別プロパティに分離できるようになり、トランジション・アニメーションの管理が格段に楽になりました。
scale: 1.3
scaleのみrotate: 45deg
rotateのみtranslate: 20px -10px
translateのみ/* 従来の書き方 — scaleだけ変えたくても全部書き直しが必要 */
.old {
transform: translateY(-10px) scale(1) rotate(0deg);
transition: transform 0.3s ease;
}
.old:hover {
transform: translateY(-10px) scale(1.2) rotate(0deg); /* translateY も維持が必要 */
}
/* 新しい個別プロパティ (Chrome 104+, Firefox 110+, Safari 14.1+) */
.new {
translate: 0 -10px;
scale: 1;
rotate: 0deg;
/* それぞれ独立してトランジション可能! */
transition: scale 0.3s ease, rotate 0.5s ease-in-out;
}
.new:hover {
scale: 1.2; /* translateには影響しない */
rotate: 15deg;
}
/* 適用順序: translate → rotate → scale(transform shorthandとは逆順) */
.note {
translate: 50px 0; /* まず移動 */
rotate: 45deg; /* 次に回転 */
scale: 1.2; /* 最後に拡大 */
}Chrome 104+, Firefox 110+, Safari 14.1+ で全ブラウザ対応済み。新しいプロジェクトでは積極的に使いましょう。
比較:transform: translate() vs position: absolute
| 観点 | transform: translate() | position: absolute |
|---|---|---|
| レイアウトへの影響 | ✅ 影響なし(元の場所を確保したまま移動) | ❌ レイアウトフローから外れる |
| パフォーマンス | ✅ GPU合成層で高速処理 | ⚠️ リフロー・リペイントが発生する可能性 |
| アニメーション適性 | ✅ 最適(60fps維持しやすい) | ❌ top/left アニメーションは重い |
| 基準点 | 自身の元の位置 | 最近接の position 祖先 |
| 使いどころ | ホバーエフェクト、アニメーション | オーバーレイ、絶対配置が必要な場合 |
🤖 AIプロンプトテンプレート
CSSのtransformプロパティを使った変形エフェクトの実装例をReact + Tailwind CSSで作成してください。 要件: - translate / scale / rotate / skew の各関数を視覚的に確認できるデモ(ホバーで変形) - transform-origin の違い(top left / center / bottom right)をホバーで比較するデモ - 3Dカードフリップ(rotateY + backface-visibility: hidden + perspective)の実装 - 個別プロパティ(translate / scale / rotate)を使った独立したトランジション管理の実装 - ホバーで複数のtransformを組み合わせるインタラクティブなカードUIコンポーネント - transform: translate(-50%, -50%)を使った絶対位置での中央配置パターン
⚠️ このプロンプトはあくまでたたき台です。AIの回答はモデルやバージョン、会話の文脈によって毎回異なります。意図通りに動かない場合は、条件を追記・修正してお使いください。