【新旧比較】CSSで画像のアスペクト比を固定する最強の手法。padding-topハックからモダンなaspect-ratioへ
公開日
Web制作において、カード型レイアウトなどで「画像のサイズがバラバラでも、決まった比率で表示させたい」という場面は非常に多いですよね。
前回は「CSS Grid」を使って全体のレイアウトを組む方法を解説しましたが、今回はその中身、つまり個別の要素の「アスペクト比(縦横比)」を固定する手法について解説します。
この記事で学べること
- 長年愛された「padding-topハック」の仕組み
- 最新の「aspect-ratio」プロパティの圧倒的な便利さ
- CSS Gridと組み合わせた時の「1fr」指定のバリエーション
目次
Tips:CSS Gridでの「列指定」の書き方
先日のGridの記事では、3列に等分する際、以下のように記述しました。
grid-template-columns: 1fr 1fr 1fr; /* 3列に等分 */
今回のサンプルコードでは、より効率的なrepeat関数を使用しています。
grid-template-columns: repeat(3, 1fr); /* これも3列に等分 */
どちらも同じ結果になりますが、列数が増える場合(例えば12列など)は repeat を使うのが実務でのマナーです。状況に応じて使い分けましょう!
1. 【旧】王道のpadding-topハック
IE11が主流だった時代から、Web制作の現場を支え続けてきた手法です。親要素のpadding-topにパーセントを指定することで、要素の高さを「横幅に対する比率」で確保します。
See the Pen アスペクト比「旧」 by 広瀬和哉 (@lpvcfdes-the-styleful) on CodePen.
実装コードと解説(旧)
/* 親要素:比率を確保する箱 */
.items .img {
position: relative;
width: 100%;
padding-top: 75%; /* 4:3の場合 (3 ÷ 4 × 100) */
overflow: hidden;
}
/* 子要素:箱の中にいっぱいに広げる */
.items .img img {
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
width: 100%;
height: 100%;
object-fit: cover;
}
- paddingの性質を利用:CSSのpadding(%)は「親要素の横幅」を基準にする性質を突いたテクニックです。
- 絶対配置が必要:paddingで中身が押し出されるため、画像は
absoluteで浮かせる必要があります。 - 安定性:IE11を含む、ほぼすべての古いブラウザで動作するのが最大のメリットです。
2. 【新】モダンなaspect-ratioプロパティ
現在のWeb制作において「標準」となったのが、aspect-ratioプロパティです。たった1行で比率を指定できるため、コードの可読性が劇的に向上します。
See the Pen アスペクト比「新」 by 広瀬和哉 (@lpvcfdes-the-styleful) on CodePen.
実装コードと解説(新)
/* 親要素:1行で比率を指定 */
.items .img {
width: 100%;
aspect-ratio: 4 / 3; /* 幅 / 高さ */
overflow: hidden;
}
/* 子要素:シンプルに100%指定 */
.items .img img {
width: 100%;
height: 100%;
object-fit: cover;
}
- 直感的な記述:「4 / 3」と書くだけで比率が決まるため、誰が見ても分かりやすいコードになります。
- 保守性が高い:絶対配置(absolute)を使わないため、HTML構造を変えずにレイアウト調整が可能です。
- 2026年の標準:モダンブラウザが完全に普及した現在、新規開発でこれを使わない理由はありません。
徹底比較:どちらを使うべき?
| 比較項目 | padding-topハック | aspect-ratio |
|---|---|---|
| コードの短さ | 長い | 非常に短い |
| メンテナンス性 | 計算が必要で少し面倒 | 比率を変えるだけで完結 |
| ブラウザ対応 | 完璧(IE11等も対応) | モダンブラウザ以降 |
まとめ:歴史を知って最新を使いこなす
2020年からデベロッパーとして活動し、数多くの現場を経験してきましたが、こうした「当たり前」の実装こそ、その時の最適な手法を選ぶことが重要です。
私はメンターとして受講生の方に教える際、あえて「旧手法」もセットで伝えています。それは、古いサイトの保守案件で必ず出会う技術だからです。歴史を知った上で最新のaspect-ratioを使いこなせるようになると、エンジニアとしての幅がグッと広がりますよ!
和哉からのアドバイス
実装で迷ったときは、まず「保守性」を考えてみてください。未来の自分や他のエンジニアが読みやすいコード(=今回の場合はaspect-ratio)を選ぶのが、プロの仕事です。
