widthとheightを指定したら、画像が歪んでしまった方です。[記事の内容]

画像には、横長のものや縦長のものがあります。サイズを統一してきれいに並べたい場合、以前はPhotoshopなどで画像を加工してからアップロードする必要がありました。
かといって、CSSでwidthとheightを固定サイズで指定すると、元の縦横比が崩れて画像がつぶれて表示されます。

画像サイズを固定するだけの、次のようなCSSです。
.object-fit_img img {
width: 250px;
height: 250px;
}そこで便利なのがobject-fitです。画像を加工せずに、CSSだけで縦横比を保ったままトリミングできます。

object-fitプロパティは、img要素やvideo要素などの置換要素を、ボックスの中にどのように収めて表示するかを指定します。
画像そのものを加工するのではなく、表示のしかたをCSSで切り替えるプロパティです。値はfill・contain・cover・none・scale-downの5種類です。

object-fitは、img要素に対して値を指定します。まずは画像をdivで囲んだ、シンプルなHTMLを用意します。
<div class="object-fit_img"><img src="../images/img.jpg" alt=""></div>object-fit専用のクラスを付けておくと、他の画像に影響せず管理しやすくなります。次に、画像の幅と高さを指定し、object-fitに値を指定します。
.object-fit_img img {
width: 250px;
height: 250px;
object-fit: cover; /*--値を入力--*/
}coverを指定しています。
object-fitの値は全部で5種類あります。まずは違いを一覧で確認しましょう。
noneとcontainを比べて、小さくなるほうの表示になります。1つずつ見ていきましょう。ここからの解説は、すべて次のサイズ指定を共通で使用します。
<div class="object-fit_img"><img src="../images/img.jpg" alt=""></div>fillは初期値です。ボックスのサイズに合わせて、縦横比を維持せず、全体が表示されるようにリサイズします。画像が引き伸ばされて歪むため、通常は使う機会が少ない値です。
.object-fit_img img {
width: 200px;
height: 200px;
object-fit: fill; /*--値を入力--*/
}containは、ボックスのサイズに合わせて、縦横比を維持したまま、全体が表示されるようにリサイズします。画像が切れないため、ロゴや商品画像などに向いています。
.object-fit_img img {
width: 200px;
height: 200px;
object-fit: contain; /*--値を入力--*/
}coverは、ボックスのサイズに合わせて、縦横比を維持したまま、ボックス全体を覆うようにリサイズします。はみ出した部分はトリミングされます。サムネイルなど、画像サイズを揃えたい場面で最もよく使用されます。
.object-fit_img img {
width: 200px;
height: 200px;
object-fit: cover; /*--値を入力--*/
}noneは、リサイズをせずに、元のサイズのままトリミングして表示します。画像の中央がボックスの中央に揃います。
.object-fit_img img {
width: 200px;
height: 200px;
object-fit: none; /*--値を入力--*/
}scale-downは、noneを指定した場合とcontainを指定した場合を比べ、サイズが小さくなるほうで表示します。
.object-fit_img img {
width: 200px;
height: 200px;
object-fit: scale-down; /*--値を入力--*/
}noneと同じ、大きい場合はcontainと同じ表示になります。画像が拡大されることはありません。
object-positionプロパティは、img要素やvideo要素などの置換要素を、ボックスの中のどの位置に表示するかを指定します。object-fitと組み合わせて、トリミングする位置を調整したいときに使用します。
なお、object-fit: fillの場合は画像がボックスいっぱいに広がるため、object-positionを指定しても見た目は変わりません。

object-positionは、img要素に値を指定します。値は半角スペースで区切り、1つ目が水平方向(横)の位置、2つ目が垂直方向(縦)の位置を決めます。初期値は50% 50%(中央)です。
<div class="object-fit_img"><img src="../images/img.jpg" alt=""></div>.object-fit_img img {
width: 250px;
height: 250px;
object-fit: cover;
object-position: 80% 50%; /*--値を入力--*/
}object-positionは、トリミングされる位置を調整するために使用します。80%が横位置、2つ目の50%が縦位置です。右寄りの部分を表示します。
object-positionは、px指定・%指定・キーワード指定(top right bottom left)の3つの方法で指定できます。以降のサンプルでは、2枚の画像に別々のクラスを付けて、違いを比較します。
<div class="object-fit_img">
<img class="img01" src="../images/img.jpg" alt="">
<img class="img02" src="../images/img.jpg" alt="">
</div>px指定は、ボックスの左上を基準にして、画像の位置を数値で指定します。マイナスの値も指定できます。
.object-fit_img img {
width: 200px;
height: 200px;
border: 10px solid #5c87a6;
background: #e2d0b6;
}
.object-fit_img .img01 {
object-fit: cover;
object-position: -40px 80px; /*--値を入力--*/
}
.object-fit_img .img02 {
object-fit: contain;
object-position: 40px -20px; /*--値を入力--*/
}-40px 80pxを指定すると、画像が左に40px、下に80pxずれた位置に表示されます。40px -20pxを指定すると、画像が右に40px、上に20pxずれた位置に表示されます。%指定は、ボックスと画像の対応する位置を、割合で揃えます。0% 0%で左上、100% 100%で右下、50% 50%で中央に揃います。
.object-fit_img img {
width: 200px;
height: 200px;
border: 10px solid #5c87a6;
background: #e2d0b6;
}
.object-fit_img .img01 {
object-fit: cover;
object-position: 5% 40%; /*--値を入力--*/
}
.object-fit_img .img02 {
object-fit: contain;
object-position: 10% 80%; /*--値を入力--*/
}5% 40%を指定すると、画像の左寄り・やや上の部分が表示されます。10% 80%を指定すると、画像がボックスの左寄り・下寄りに配置されます。top・right・bottom・left・centerのキーワードでも指定できます。top rightのように、縦横それぞれの位置を英単語で書けるため、直感的で読みやすい指定方法です。
.object-fit_img img {
width: 200px;
height: 200px;
border: 10px solid #5c87a6;
background: #e2d0b6;
}
.object-fit_img .img01 {
object-fit: cover;
object-position: top right; /*--値を入力--*/
}
.object-fit_img .img02 {
object-fit: contain;
object-position: bottom left; /*--値を入力--*/
}
ここまではwidthとheightを固定値で指定してきましたが、実務では画面幅に合わせて画像サイズが変わるレイアウトが多くなります。その場合は、aspect-ratioとobject-fit: coverを組み合わせると、縦横比を保ったまま、画像のサイズをそろえることができます。
.object-fit_img img {
width: 100%;
aspect-ratio: 16 / 9;
object-fit: cover;
}
現在のChrome・Firefox・Safari・Edgeなどのモダンブラウザは、object-fitとobject-positionに対応しています。一方、Internet Explorer 11は未対応です。IEのサポートはすでに終了しているため、通常は対応不要ですが、旧環境の保守案件などで必要な場合は「object-fit-images」を使用します。
上記のページからZIPファイルをダウンロードし、中にあるofi.min.jsを使用します。まずはHTMLで画像にobject-fit-imgというクラスを付け、スクリプトを読み込みます。
<div><img src="../images/img.jpg" class="object-fit-img" alt=""></div>
<script src="js/ofi.min.js"></script>次に、付けたクラス名を指定してスクリプトを実行します。
objectFitImages('img.object-fit-img');object-fitを再現するためのスクリプトです。さらに、IEに対応させるための専用スタイルとして、font-familyに'object-fit: 〇〇;'の形で値を指定します。
/*--使用例 ①--*/
.object-fit-img {
object-fit: contain;
font-family: 'object-fit: contain;'; /*--追加 ①--*/
}
/*--使用例 ②--*/
.object-fit-img {
object-fit: cover;
object-position: bottom left;
font-family: 'object-fit: cover; object-position: bottom left;'; /*--追加 ②--*/
}object-fitやobject-positionと同じ値を文字列で書きます。contain、②はcoverとobject-positionを組み合わせた例です。今回は、object-fitとobject-positionを使った画像のトリミング方法を紹介しました。object-fitで画像の収め方を決め、object-positionでトリミング位置を調整します。実務でも頻繁に使用されるプロパティなので、サンプルを試しながらしっかりマスターしましょう。
object-fitは、fill・contain・cover・none・scale-downの5種類の値を指定できます。object-fit: coverを使用します。object-positionは、1つ目に横の位置、2つ目に縦の位置を指定します。初期値は50% 50%です。object-positionは、px指定・%指定・キーワード指定ができます。aspect-ratioと組み合わせると、レスポンシブでも画像のサイズを揃えられます。object-fit-imagesを使用します。2026.11.14
2026.11.10
2026.11.05
2026.11.03
2026.10.30
2026.10.27
2026.10.10
2026.08.14
2026.08.12
2026.04.05

© 2026 shu-naka-blog