1. ホーム
  2. html

[解決済み] CSSでdivのアスペクト比を維持する

2022-03-16 03:51:09

質問

を作成したいのですが div ウィンドウの幅が変わると、その幅と高さを変更できるようにする。

幅に応じて高さが変わるようなCSS3ルールはありますか。 アスペクト比を維持したまま ?

JavaScriptでできるのは知っていますが、CSSだけでやりたいのです。

解決方法は?

ラッパーを作成するだけです。 <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 のアスペクト比)。

これは、パディングのために:

を基準にしてパーセンテージを計算します。 生成されたボックスの含むブロックの [...] (ソースは w3.org 強調)

他のアスペクト比と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の縦横比を保ち、コンテンツが伸びるのを防ぐために、絶対位置の子を追加し、wrapperの端までwithで伸ばす必要があります。

div.stretchy-wrapper {
  position: relative;
}

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

ここでは デモ と、より詳細な デモ