レスポンシブデザインやカード型レイアウトで画像を扱うとき、画像の比率が揃わず表示が崩れてしまうことがあります。そんなときに便利なのが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つを組み合わせるのがベストプラクティスです。