CSSでdivのアスペクト比を維持する 質問する

CSSでdivのアスペクト比を維持する 質問する

divウィンドウの幅が変わると幅/高さも変わるレスポンシブなものを作りたいです。

アスペクト比を維持しながら、幅に応じて高さを変更できる CSS ルールはありますか?

JavaScript 経由でこれを行うことができることはわかっていますが、CSS のみを使用することを好みます。

ウィンドウの幅に応じてアスペクト比を維持するdiv

ベストアンサー1

次のように、<div>のパーセンテージ値を持つラッパーを作成します。padding-bottom

.demoWrapper {
  padding: 10px;
  background: white;
  box-sizing: border-box;
  resize: horizontal;
  border: 1px dashed;
  overflow: auto;
  max-width: 100%;
  height: calc(100vh - 16px);
}

div {
  width: 100%;
  padding-bottom: 75%;
  background: gold; /** <-- For the demo **/
}
<div class="demoWrapper">
  <div></div>
</div>

<div>コンテナの幅の 75% に等しい高さ (アスペクト比 4:3)の が作成されます。

これは、パディングに関して次の事実に依存します。

パーセンテージは、生成されたボックスの包含ブロックの幅を基準に計算されます [...] (出典:翻訳元(強調は筆者による)

他のアスペクト比と100%幅のpadding-bottom値:

aspect ratio  | padding-bottom value
--------------|----------------------
    16:9      |       56.25%
    4:3       |       75%
    3:2       |       66.66%
    8:5       |       62.5%

div にコンテンツを配置する:

div のアスペクト比を維持し、そのコンテンツが div を引き伸ばさないようにするには、絶対位置に配置された子要素を追加し、次のようにしてラッパーの端まで引き伸ばす必要があります。

div.stretchy-wrapper {
  position: relative;
}

div.stretchy-wrapper > div {
  position: absolute;
  top: 0; bottom: 0; left: 0; right: 0;
}

デモはこちらそしてさらに詳しいデモ

おすすめ記事