在 2021 年更新后,我们现在有了一种广泛支持的符合标准的方法,即使用 CSS纵横比属性。
您可以像这样简单地使用高度和宽度:
.myimage {
width: 50%;
height: auto;
aspect-ratio: 1280 / 720;
}
这将首先将宽度计算为父元素的 50%,然后,将高度设置为 auto(最好将其显式设置为 auto,以防其他东西更改高度以实现可维护性),它将使用 aspect- 中的值比率来计算它应该保留的高度。
即使在加载图像之后,这也会影响图像元素。这意味着如果纵横比属性与图像的实际纵横比不匹配,则图像将被拉伸以适应。您可以通过预先添加“auto”值来防止这种情况。
aspect-ratio: auto 1280 / 720;
这样,它将在图像加载之前使用定义的纵横比并且知道实际的纵横比,然后在浏览器知道固有纵横比后回退到自动。
Internet Explorer 和 Safari 等非标准浏览器不支持此功能,因此,如果您想在纯粹使用 CSS 的浏览器中使用此功能,您需要继续使用kubi 答案中的第一个解决方法(作为旁注,第 4 个option 不是,也从来没有成为标准的一部分)。
然而,这个问题甚至可能不会被问到是否是今天(至少不是同一个人),因为现在有一个 HTML 解决方案,它是旧的、预响应式网页设计 HTML 解决方案。大多数现代浏览器现在使用图像元素的高度和宽度属性来计算纵横比,而 CSS 高度和宽度会覆盖这些值,除非它们设置为自动。
所以...
<img src='myimage.jpg' class='myimage' width='1280' height='720' />
.myimage {
width: 50%;
height: auto;
}
现在这将保留正确的垂直高度量,即使在 Safari 中也是如此。截至目前,仍有一些特定于浏览器的实现说明需要考虑。
在 Chromium 和 Firefox 中,它目前是使用 CSS aspect-ratio 属性实现的,在计算的宽高比前加上“auto”。
aspect-ratio: auto attr(width) / attr(height);
由于在我写这篇文章的时候 Safari 还不支持 aspect-ratio 属性,所以它的实现有更多的细微差别。因此,如果 src 属性中没有有效的图像值,它将不会保留空间,这意味着如果您使用老式的基于 JavaScript 的图像延迟加载,则需要包含备用图像。
在任何情况下,您都应该尽可能在图像标签中包含高度和宽度属性。他们现在实际上正在做一些事情。