cssで背景画像をトリミングする方法

背景画像(background)を、cssだけで
希望の縦横比にトリミングする方法をご紹介します。
「親要素の幅」を基準に縦方向の%を指定する考えを
応用したテクニックとなります。
こちらの記事と合わせてお読みください。
縦横比3:2の画像を16:9にトリミングしてみよう
縦横比3:2(横 500px × 縦333px)を
縦横比16:9(横 500px × 縦281px)にトリミングしてみます。
縦横比3:2の画像

html
|
1 2 3 |
<div class="wrapper"> <div class="inner"></div> </div> |
css
|
1 2 3 4 5 6 7 8 9 |
.wrapper { width: 500px; background: url(./pic/img01.jpg) no-repeat center center; background-size: cover; } .inner { padding-top: 56.25%; } |
子要素のpadding-top: 56.25%;
という指定で、縦横比をコントロールしています。
16:9にトリミング後の画像

計算式
縦横比の計算式は以下になります。
高さ ÷ 幅 × 100
今回の例では16:9にしたかったので、
9 ÷ 16 × 100 = 56.25
という計算になります。
cssでは、「自分の幅」を基準に縦方向を%で指定できません。
「親要素の幅」を基準に縦方向の%は指定できます。
詳しくはこちらの記事で紹介しています。
この考えを元にした計算式となります。
before擬似要素でも同じことができる
極力htmlをシンプルにしたい、そんな時はbefore擬似要素でも
同じようにトリミングする事が出来ます。
html
|
1 2 |
<div class="wrapper"> </div> |
css
|
1 2 3 4 5 6 7 8 9 10 11 |
.wrapper { width: 500px; background: url(./pic/img01.jpg) no-repeat center center; background-size: cover; } .wrapper:before { content: ""; display: block; padding-top: 56.25%; } |
![MARKLEAPS[マークリープス]](https://markleaps.com/blog/wp-content/themes/mkl/images/00_logo.png)


![[CSS] shape-outside プロパティで画像にテキストを回り込ませる方法](https://markleaps.com/blog/wp-content/uploads/2025/09/css-shape-outside-500x254.jpg)
![[HTML・CSS] 説明リストdlのdtとddを横並びに表示する方法(コピペで使えるコード付き)](https://markleaps.com/blog/wp-content/uploads/2025/09/html-css-dl-flex-grid-500x254.jpg)
![[CSS] 疑似クラス is() とwhere() の使い方と違い](https://markleaps.com/blog/wp-content/uploads/2023/11/css-is-where-500x254.jpg)