Web中如何实现长宽比

长宽比在影视制作中又被称之为宽高比,指的是一个视频的宽度除以它的高度所得到的比例,通常表示为 x:y 或 x ×y,其中的冒号和叉号表示中文的 “比” 之意。

Web 中的长宽比最初是用于响应式设计中的 img、video 之类的元素,随之扩展为适用于任何的容器长宽比。

利用可替换元素

可替换元素(img、video)和其他元素不同,它们本身有像素宽度和高度的概念。所以,只需要指定其宽度或者高度值,另一边自动计算就可以了。

img {
  width: 100%;
  height: auto;
}

备注: 基于可替换元素的这个特性,当需要一个固定长宽比时,可以用可替换元素撑开容器,具体(以 4: 3 为例)实现:准备一张长宽比为 4:3 的透明图片;在容器中引用一个 img 元素,其 src 是该图片的 URL,width 设备为 100%;容器的主内容区域,通过绝对定位,覆盖在图片上。

<div style="position: relative;">
  <img src="pic-4X3.jpg" style="width: 100%">
  <div style="position: absolute;top: 0; left: 0; width: 100%">
    主内容区域
    </div>
</div>

padding-bottom/padding-top

CSS 知识点: 容器垂直方向的内外边距(padding-bottom/padding-top/margin-bottom/margin-top)使用百分比做单位时,是基于容器的宽度来计算的。

也就是说,当一个容器的宽度是 300px,如果没有子元素,并设置 padding-top: 100%,则 padding-top 的实际值是 300px,容器被撑开的高度为 300px。然后,在容器中,使用绝对定位来充满主内容。

.wrapper {
  position: relative;
  width: 300px;
}
.wrapper-aspect-ratio {
  width: 100%;
    height: 0;
    padding-bottom: 100%;
}
..wrapper-main {
  positon: absolute;
  top: 0;
  left: 0;
  width: 100%;
}

在 CSS 中有一个神奇的 calc() 函数,它可以做一些基本的数学计算:

padding-top: calc(200 / 300 * 100%);

备注: 该方式只能高度随着宽度动,并不能实现宽度随着高度动。

aspect-ratio 属性

aspect-ratio 属性为容器定义一个期待的纵横比,这个纵横比可以用来计算自动尺寸以及为其他布局函数服务。

aspect-ratio 属性接收以下值:

  • auto:具有固有宽高比的替换元素将使其宽高比,否则相当于没有设置宽高比。
  • 宽高比,即两个无单位值之间的比例。
<div class=".aspect-ratio"></div>
<style>
  .aspect-ratio {
        aspect-ratio: 2/1;
    background: #0aa;
  }
</style>

备注: 目前来看(2022-10-21),除了 IE,其他浏览器都支持该属性。caniuse - aspect-ratio

JavaScript计算

用 JavaScript 根据目标元素的宽度,计算需要的高度,再将高度设置到目标元素。

参考资料

稀土掘金 - CSS如何实现固定宽高比?

码农网 - 容器长宽比

MDN - aspect-ratio

© lizhao all right reserved,powered by Gitbook文件修订时间: 2022-10-21 17:51:50

results matching ""

    No results matching ""