小编典典

使用 CSS 保持 div 的纵横比

all

我想创建一个div可以随着窗口宽度的变化而改变其宽度/高度的。

是否有任何 CSS3 规则允许高度根据宽度变化, 同时保持其纵横比

我知道我可以通过 JavaScript 做到这一点,但我更喜欢只使用 CSS。


阅读 169

收藏
2022-02-25

共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)。

这取决于填充的事实:

百分比是根据生成框的包含块的 宽度计算的 […](来源: w3.org,强调我的)

其他纵横比和 100% 宽度的底部填充值:

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

将内容放在 div 中:

为了保持 div 的纵横比并防止其内容拉伸它,您需要添加一个绝对定位的子元素并将其拉伸到包装器的边缘:

div.stretchy-wrapper {
  position: relative;
}

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

这是一个 演示
和另一个更深入的演示

2022-02-25