【CSS】画像を斜めに傾けて表示する方法|rotateとskewの使い分け・ホバー演出

CSSの transform プロパティを使うと、画像を斜めに傾けて表示できます。「傾ける」には回転(rotateせん断=平行四辺形に歪める(skewの2種類があり、見せたい効果で使い分けます。この記事では両者の違いから、ホバーで滑らかに傾ける演出までを解説します。

この記事の結論:画像ごと斜めに回転させるなら transform: rotate(角度deg)平行四辺形のように歪ませるなら transform: skewX(角度deg) を使います。回転の中心は transform-origin で変えられます。
スポンサーリンク

rotateで回転させる

rotate() は要素全体を指定角度だけ回転させます。正の値で時計回り、負の値で反時計回りです。

画像を回転させる
.tilted {
  transform: rotate(15deg);  /* 時計回りに15度 */
}

.tilted-left {
  transform: rotate(-15deg); /* 反時計回りに15度 */
}
HTML
<img class="tilted" src="example.jpg" alt="傾いた画像">

skewで平行四辺形に傾ける

「斜めに歪ませたい(平行四辺形のように)」場合は skewX() / skewY() を使います。rotate が向きを変えるのに対し、skew形を傾けて歪ませるのが違いです。

skewで歪ませる
.skewed {
  transform: skewX(-12deg); /* 横方向に傾ける */
}

/* バナーなどでよく使う「斜めの帯」 */
.ribbon {
  transform: skew(-10deg);
}
rotate=「傾けて回す(画像の中身も一緒に回る)」、skew=「平行四辺形に歪める(中身は斜めにつぶれる)」と覚えると分かりやすいです。斜めに伸びるアニメーションは斜めに伸びる要素を作成するCSSアニメーションも参考になります。

回転の中心を変える(transform-origin)

既定では要素の中央を中心に回転・変形します。transform-origin で中心位置を変更できます。例えば左下を軸にめくれるような効果も作れます。

回転の軸を左下に
.corner {
  transform: rotate(20deg);
  transform-origin: left bottom; /* 左下を軸に回転 */
}

ホバーで滑らかに傾ける

transition を併用すると、マウスを乗せたときにふわっと傾くインタラクティブな演出になります。

ホバーで傾けるアニメーション
.photo {
  transition: transform 0.3s ease;
}

.photo:hover {
  transform: rotate(5deg) scale(1.05); /* 少し傾けて拡大 */
}
ホバー時の拡大演出はホバー時に画像を拡大する方法で詳しく解説しています。

複数のtransformを組み合わせる

回転・移動・拡大などは1つの transform にまとめて指定します。プロパティを分けて2回書くと後の指定で上書きされてしまうので注意してください。

NG / OK: 複数transformの書き方
/* NG: 2つめのtransformが1つめを上書きしてrotateが消える */
.bad {
  transform: rotate(15deg);
  transform: translateX(20px);
}

/* OK: スペース区切りで1つにまとめる */
.good {
  transform: rotate(15deg) translateX(20px);
}
transform での回転・変形は、周りのレイアウトを押しのけません(元の領域を保ったまま見た目だけ変わります)。大きく傾けると隣の要素と重なることがあるため、margin の確保やoverflow の扱いに注意しましょう。

応用:画像を菱形(ダイヤ型)に見せる

外側の要素を45度回転+overflow: hidden、内側の画像を-45度回転で戻すと、画像を菱形に切り出したように見せられます。

菱形トリミング
.diamond {
  width: 200px;
  height: 200px;
  overflow: hidden;
  transform: rotate(45deg);
}
.diamond img {
  width: 100%;
  height: 100%;
  object-fit: cover;
  transform: rotate(-45deg) scale(1.5); /* 戻して隙間を埋める */
}

よくある質問(FAQ)

QCSSで画像を斜めに傾けるには?
Atransform: rotate(15deg) で回転させて傾けられます。平行四辺形のように歪ませたい場合は skewX() / skewY() を使います。
Qrotateとskewはどう違いますか?
Arotate は要素を回転させます(画像の中身も一緒に回る)。skew平行四辺形に歪ませる変形で、中身が斜めにつぶれます。バナーの斜め帯などは skew、写真を傾けるなら rotate が向いています。
Q傾けたら隣の要素と重なってしまいます。
Atransform は元のレイアウト領域を保ったまま見た目だけ変えるため、大きく傾けると重なることがあります。margin で余白を確保するか、親に overflow: hidden を指定して調整します。
Q回転や移動を複数指定したら一部が効きません。
Atransform を複数行に分けて書くと後の指定で上書きされます。transform: rotate(15deg) translateX(20px); のようにスペース区切りで1つにまとめて指定してください。

まとめ

CSSで画像を斜めに傾けるポイントを整理します。

  • 回転は transform: rotate(角度deg)
  • 平行四辺形に歪めるなら skewX() / skewY()
  • 回転の中心は transform-origin で変更できる
  • ホバー演出は transition と組み合わせる
  • 複数の変形はスペース区切りで1つの transformにまとめる

関連として、斜めに伸びる要素のCSSアニメーションホバー時に画像を拡大する方法画像を半透明に表示する方法もあわせて読むと、CSSの画像演出の幅が広がります。