【CSS】object-fitとobject-positionで画像の表示位置を自在に調整する方法

HTML/CSS

レスポンシブデザインやカード型レイアウトで画像を扱うとき、画像の比率が揃わず表示が崩れてしまうことがあります。そんなときに便利なのがCSSのobject-fitとobject-positionです。これらを組み合わせることで、画像のトリミングや表示位置を自由にコントロールできます。

object-fitとは

object-fitはimgやvideoなどの置換要素に対して、コンテナに収める際の表示方法を指定するプロパティです。代表的な値は以下の通りです。

  • fill(初期値):要素をコンテナいっぱいに引き伸ばす。比率は無視される
  • contain:アスペクト比を維持したままコンテナに収まるよう縮小
  • cover:アスペクト比を維持しつつ、コンテナを完全に覆う(はみ出した部分はトリミング)
  • none:リサイズせず元のサイズで表示
  • scale-down:noneとcontainを比較して小さい方を適用

基本的な使い方

カード型レイアウトで画像の比率を揃える例です。

<div class="card">
  <img src="sample.jpg" alt="サンプル">
</div>

.card {
  width: 300px;
  height: 200px;
  overflow: hidden;
}
.card img {
  width: 100%;
  height: 100%;
  object-fit: cover; /* コンテナいっぱいに収める */
}

この例では、画像がトリミングされつつもカードの枠にきれいに収まります。

object-positionで表示位置を調整する

object-positionは画像の表示位置を指定するプロパティで、background-positionに似ています。値は「水平 垂直」で指定でき、キーワードやパーセンテージも利用可能です。

.card img {
  width: 100%;
  height: 100%;
  object-fit: cover;
  object-position: center top; /* 上寄せ */
}

例えば顔写真などを扱うときに、重要な部分が中央や上部に来るよう調整できます。

実用例:ギャラリーやサムネイル

ユーザー投稿型のサイトやECサイトの商品一覧では、画像の比率がバラバラになりがちです。object-fitとobject-positionを組み合わせれば、統一感を保ちながら重要な部分を見せることができます。

.thumbnail {
  width: 150px;
  height: 150px;
  overflow: hidden;
}
.thumbnail img {
  width: 100%;
  height: 100%;
  object-fit: cover;
  object-position: 50% 50%; /* 中央寄せ */
}

ブラウザ対応状況

object-fitとobject-positionは主要なモダンブラウザで広くサポートされています。古いIEでは対応していませんが、最近の開発ではほぼ問題なく使用可能です。

まとめ

object-fitは画像のリサイズ方法を、object-positionは表示位置を制御できるプロパティです。特にカード型レイアウトやサムネイル表示で役立ち、統一感のあるデザインを実現できます。比率が揃わない画像を扱うときは、この2つを組み合わせるのがベストプラクティスです。