aspect-ratio

要素の縦横比を指定するプロパティ。 padding-topで比率を保つハックを、1行の指定に置き換えられます。

今の書き方

比率をそのまま指定できます。 ラッパー要素も、比率から計算したパーセント値も要りません。

iframe {
  width: 100%;
  height: auto;
  aspect-ratio: 16 / 9;
}

以前の書き方

paddingのパーセント値が親要素の幅を基準にする性質を使い、高さ0のボックスに比率ぶんの余白を持たせていました。 中身は絶対配置で重ねるため、ラッパー要素が1つ余計に必要です。

.video {
  position: relative;
  height: 0;
  padding-top: 56.25%; /* 9 ÷ 16 */
}

.video > iframe {
  position: absolute;
  top: 0;
  left: 0;
  width: 100%;
  height: 100%;
}
<div class="video">
  <iframe src="https://www.youtube.com/embed/..."></iframe>
</div>

置き換えるときの注意点

  • 中身が比率より高くなると、ボックスは中身に合わせて伸びます。 比率を崩したくない場合はmin-height: 0かoverflow: autoを併用します。
  • widthとheightの両方をauto以外にすると、aspect-ratioは効きません。 どちらか一方はautoにしておきます。
  • <img>や<video>は、HTMLにwidth・height属性を書いておけば、ブラウザが読み込み前から比率を確保します。 CSSはheight: autoだけで済み、読み込み時のレイアウトのずれも防げます。

フォールバック

対象の5ブラウザはすべて対応済みなので、通常は古い書き方を残す必要はありません。 古いブラウザも支える必要がある場合だけ、@supportsで分岐して以前の書き方に戻します。 以前の書き方はラッパー要素を前提にするため、HTMLにはiframeを囲む.videoを残しておきます。

@supports not (aspect-ratio: 1) {
  .video {
    position: relative;
    height: 0;
    padding-top: 56.25%;
  }

  .video > iframe {
    position: absolute;
    top: 0;
    left: 0;
    height: 100%;
  }
}

Browser Support

  • Chrome

    v88+
    2021-01-19
  • Edge

    v88+
    2021-01-21
  • Safari

    v15+
    2021-09-20
  • Safari (iOS)

    v15+
    2021-09-20
  • Firefox

    v89+
    2021-06-01

機能名やコードで検索できます

例:aspect-ratio、:has()、padding-top

別の言葉や、プロパティ名で試してください

検索を読み込めませんでした