BLOGブログ

CSSで画像をトリミングする方法|object-fit・aspect-ratio・object-positionで好きな比率と位置に切り抜く【2026年版】

竹節 大輝 /

Web制作・ホームページ制作

一覧ページのサムネイルの縦横比をそろえたい、スマートフォンでは人物が切れないように位置をずらしたい。そんなときに、画像をあらためて書き出さずに、CSSだけで切り抜けると便利です。 結論は、aspect-ratio で枠の比率を決め、object-fit: cover で枠を埋め、object-position で切り抜く位置を決めることです。 この記事では、Cruwのサイトで実際に使っているCSSを例に、表示結果のスクリーンショットつきで紹介します。

  • object-fit の値ごとの違いと、aspect-ratio で比率を決める書き方
  • object-position で、写真のどこを残すかを決める方法
  • 写真の一部分を拡大して切り抜く方法と、パソコンとスマホで切り抜き方を変える方法

※2023年に公開した「【CSS】画像を好きな箇所・好きな比率でトリミングする方法」を、今の書き方にあわせて作り直した記事です。

結論:aspect-ratio・object-fit・object-position の3つで切り抜く

.thumb {
  display: block;
  width: 100%;
  aspect-ratio: 4 / 3;     /* 枠の比率(横4:縦3) */
  object-fit: cover;       /* 歪ませずに枠を埋め、はみ出した部分を切る */
  object-position: 50% 30%; /* 残したい位置(横 縦) */
}
<img class="thumb" src="photo.jpg" alt="打ち合わせの様子" width="1200" height="800">

この3行で、元の写真がどんな比率でも「横4:縦3」の枠にぴったり収まり、はみ出した部分は自動で切り取られます。 object-fit と aspect-ratio は、Chrome・Edge・Firefox・Safari の現在のバージョンで使えます。

以前は、比率をそろえるために padding-top: 75%; の箱を作って画像を絶対配置する書き方がよく使われていました。今は aspect-ratio を1行書くだけで済みます。

object-fit の値の違い(fill・contain・cover)

object-fit は、画像を枠(width と height で決めた大きさ)にどう収めるかを決めるプロパティです。 同じ横長の写真を、正方形の枠に入れて比べてみました。

object-fitのfill・contain・coverで同じ写真を正方形の枠に入れた比較
左から fill(初期値)、contain、cover。cover だけが、歪まずに枠いっぱいに表示される
値表示のされ方向いている場面
fill(初期値)枠に合わせて引き伸ばす。写真が歪むほぼ使わない
contain写真全体を枠の中に入れる。上下か左右に余白ができるロゴ、商品画像、図など、切れては困るもの
cover枠を埋めるまで拡大し、はみ出しを切るサムネイル、メインビジュアルなどの写真
none元の大きさのまま。はみ出しは切る特殊な用途
scale-downnone と contain の小さい方小さい画像を拡大したくないとき

トリミングに使うのは cover です。 一方で、Cruwのトップページに置いている「サイト改善おまかせパック」のバナーでは、スマホ表示のときにイラストが文字に重ならないよう、あえて contain を使い、object-position: center bottom; で下にそろえています。切れては困る画像には contain が向いています。

aspect-ratio で、好きな比率にトリミングする

aspect-ratio は、要素の縦横比を決めるプロパティです。width だけを決めれば、高さは比率から自動で計算されます。

/* 横幅いっぱい・4:3 のサムネイル */
.card img {
  display: block;
  width: 100%;
  aspect-ratio: 4 / 3;
  object-fit: cover;
}

/* 正方形 */
.icon img {
  width: 120px;
  aspect-ratio: 1;
  object-fit: cover;
}

Cruwのホームページ制作のページでは、「こんな方におすすめ」の写真をこの書き方で 4:3 にそろえています。元の写真の比率がばらばらでも、カードの高さがそろうので、一覧がきれいに見えます。

img に width と height の属性も書いておく

HTMLの img には、元の画像の width と height を書いておくのがおすすめです。 ブラウザが画像を読み込む前に場所を確保できるので、読み込み中にレイアウトがガタッとずれる(CLS:レイアウトのずれ)のを防げます。CSSで width: 100% と aspect-ratio を指定していれば、表示される大きさはCSSのほうが優先されます。

WordPressでは、メディアから挿入した画像に width と height が自動で入ります。

object-position で、切り抜く位置を決める

cover で切り抜くと、初期値では写真の真ん中が残ります。残したい人や物が端にあるときは、object-position で位置をずらします。

object-positionの値を変えて、正方形に切り抜く位置を左・中央・右に動かした比較
左から 15%、center(初期値)、68%。左端の人物が切れるか、残るかが変わる
img {
  object-fit: cover;
  object-position: 15% center; /* 横 縦 */
}

値は「横の位置」「縦の位置」の順に書きます。

  • 0% は左端(上端)、100% は右端(下端)、50%(center)は真ん中
  • left right top bottom のキーワードも使える
  • 横長の写真を正方形に切るときは、はみ出すのは左右だけなので、効くのは横の値だけ。写真より横長の枠に入れるときは、上下がはみ出すので縦の値で調整する

% は「写真の何%の位置を、枠の何%の位置に合わせるか」という意味です。0% なら写真の左端が枠の左端に、100% なら右端が右端に合います。思った位置にならないときは、5%ずつ変えながらブラウザで確認するのが早いです。

パソコンとスマホで、切り抜く位置を変える

画面幅によって枠の形が変わるときは、メディアクエリで object-position を切り替えます。 Cruwの会社概要ページのメインビジュアルでは、実際に次のように書いています。

#lowerFirstView img {
  object-position: center 20%;   // パソコン:横長の枠。上下を切るので、縦の位置を調整

  @media (max-width: 767px) {
    object-position: 0% center;  // スマホ:縦長の枠。左右を切るので、左端に寄せる
  }
}
同じ写真を、パソコン用の横長の枠とスマホ用の縦長の枠に、それぞれ違う位置で切り抜いた比較
パソコンでは3人全員、スマホでは左の人物とモニターが残るようにしている

横長の枠では写真の上下が、縦長の枠では左右が切れます。どちらの枠でも主役が残るように、切れる方向にあわせて値を決めるのがポイントです。

写真の一部分を拡大してトリミングする方法

object-fit: cover は「枠を埋めるところまで」しか拡大しません。写真の一部分だけを大きく見せたいときは、次の3つの方法があります。

方法対応ブラウザおすすめの場面
① transform: scale() で拡大すべての主要ブラウザ基本はこれ。img のまま使える
② 背景画像(background-size)すべての主要ブラウザ装飾の画像
③ object-view-boxChrome・Edge のみ(2026年11月時点)試験的に使うとき

① 枠で隠して、transform: scale() で拡大する(おすすめ)

画像を包む要素に overflow: hidden をつけ、中の画像を transform: scale() で拡大します。 transform-origin(拡大の中心)を、残したい場所にあわせるのがコツです。

<div class="zoom">
  <img src="photo.jpg" alt="打ち合わせで使っているモニター" width="1200" height="800">
</div>
.zoom {
  overflow: hidden;          /* 枠からはみ出した部分を隠す */
  aspect-ratio: 4 / 3;
  border-radius: 14px;
}
.zoom img {
  display: block;
  width: 100%;
  height: 100%;
  object-fit: cover;
  object-position: 30% 45%;
  transform: scale(2.4);         /* 2.4倍に拡大 */
  transform-origin: 30% 45%;     /* 拡大の中心(object-position と同じにする) */
}
coverだけで切り抜いた写真と、transform scaleでモニターの部分を拡大して切り抜いた写真の比較
左は cover と object-position だけ。右は scale(2.4) を足して、モニターの部分を拡大した

object-position と transform-origin を同じ値にしておくと、「その場所を中心に拡大する」と考えられるので、位置を調整しやすくなります。 画像は img のままなので、alt や loading="lazy"、WordPressが自動でつける srcset(画面に合わせた大きさの画像の出し分け)もそのまま使えます。

なお、拡大すると画質は粗くなります。2倍以上に拡大するなら、元の画像を大きめに用意しておきましょう。 ちなみにCruwのホームページ制作のページでは、同じ仕組みで、写真にマウスを重ねたときだけ scale(1.05) で少し拡大する動きをつけています。

② 背景画像にして、background-size と background-position で調整する

旧記事で紹介した方法です。img を使わず、div などの背景画像として表示します。

.zoom-bg {
  aspect-ratio: 4 / 3;
  background-image: url(photo.jpg);
  background-size: 240%;          /* 拡大率 */
  background-position: 30% 45%;   /* 位置 */
  background-repeat: no-repeat;
}

拡大率と位置を2行で決められるので手軽ですが、背景画像には alt をつけられず、検索エンジンや画面の読み上げにも「画像」として伝わりません。 飾りの画像には向いていますが、内容を伝える写真には ① の方法をおすすめします。

③ object-view-box で切り抜く範囲を指定する(対応ブラウザに注意)

object-view-box は、画像の「どの範囲を見せるか」を直接指定できる新しいプロパティです。

img {
  width: 100%;
  aspect-ratio: 4 / 3;
  object-fit: cover; /* 切り抜いた範囲と枠の比率が違っても歪まないように */
  object-view-box: inset(25% 40% 20% 15%); /* 上 右 下 左 をどれだけ切り落とすか */
}

書き方はわかりやすいのですが、MDNの互換性データ(2026年11月に確認)では、対応しているのは Chrome・Edge(バージョン104から)だけで、Safari は開発者向けのプレビュー版のみ、Firefox は未対応です。 iPhone の Safari で効かないため、今はまだ本番のサイトでは ① の方法を使うのが安心です。

写真を差し替えたいほど違うなら、picture 要素を使う

パソコンでは横長の全体写真、スマホでは人物のアップ、のように「切り抜き位置の調整」では足りないときは、picture 要素で画像そのものを出し分けます。

<picture>
  <source media="(max-width: 767px)" srcset="photo-sp.jpg" width="750" height="1000">
  <img src="photo-pc.jpg" alt="打ち合わせの様子" width="1600" height="600">
</picture>

スマホでは photo-sp.jpg、それ以外では photo-pc.jpg が読み込まれます。スマホ用の画像は小さく書き出せるので、表示も速くなります。 ただし画像を2枚用意して管理する手間が増えるので、まずは object-position の切り替えで足りないかを試してみてください。

トリミングがうまくいかないときのチェックポイント

症状よくある原因と対処
object-fit: cover が効かない画像に高さが決まっていない。height か aspect-ratio を指定する
画像の下に数pxのすき間ができるimg は文字と同じ扱いのため。display: block; をつける
角丸にしたのに、拡大した画像が角からはみ出す角丸と overflow: hidden を、画像ではなく包む要素につける
flexやgridの中で比率が崩れる子要素が引き伸ばされている。align-self: start; をつけるか、包む要素に比率を指定する
拡大した写真がぼやける元の画像が小さい。表示する大きさの2倍程度の画像を用意する

よくある質問

object-fit は動画にも使えますか?

使えます。video 要素に object-fit: cover; を指定すれば、写真と同じように枠いっぱいに表示して、はみ出しを切り取れます。背景に動画を流すメインビジュアルなどでよく使われます。

WordPressのブロックエディターでもトリミングできますか?

画像ブロックの設定にある「アスペクト比」と「縮尺」で、この記事と同じ aspect-ratio と object-fit が設定されます。縮尺の「余白なし」が cover、「余白あり」が contain です。切り抜く位置まで細かく決めたいときは、追加CSSクラスをつけて、テーマのCSSで object-position を指定するのがおすすめです。

画像を加工ソフトで切り抜くのと、どちらがいいですか?

比率や位置をデザインの都合で変えることが多いなら、CSSでの切り抜きが便利です。元の写真は1枚のままなので、後から比率を変えたいときもCSSを直すだけで済みます。一方で、表示されない部分のデータも読み込むので、極端に大きな写真は、表示サイズに近い大きさに縮小してからアップロードしましょう。

まとめ

  • 画像のトリミングは、aspect-ratio で比率、object-fit: cover で枠を埋め、object-position で残す位置を決める
  • パソコンとスマホで枠の形が変わるときは、メディアクエリで object-position を切り替える。写真ごと変えたいときは picture 要素
  • 一部分を拡大したいときは、包む要素に overflow: hidden、画像に transform: scale()。object-view-box はまだ Chrome・Edge だけ

Cruwでは、長野県上田市を拠点に、スマートフォンでもパソコンでも写真がきれいに見えるホームページの制作を行っています。「スマホで写真の人物が切れてしまう」「一覧ページのサムネイルをそろえたい」といったご相談も、ホームページ制作のページからお気軽にどうぞ。

GoogleのAI検索で「Cruwのブログ」を優先表示しませんか?

Googleの最新機能では、お気に入りのサイトを「優先するソース」として登録できるようになりました。登録していただくと、GoogleのAIモードやAI Overviewsが回答をつくる際、当サイトの情報を優先的に参照・表示してくれるようになります。

これからも地域ビジネスに役立つ最新のWebマーケティング情報を発信していきますので、ぜひ優先ソースへのご登録をお願いいたします!