本ページはプロモーションが含まれています

【新旧比較】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)を選ぶのが、プロの仕事です。