如果您需要一个大小为纵横比的 <div>
(或任何可以包含子元素的元素),您可以做到。也许最简洁的方法是使用自定义属性大小的伪元素,通过基于宽度的填充来推动正确的最小高度。
但是像 <img>
这样的媒体元素没有子元素。<video>
标签不是自闭合的,但当它被支持时(几乎总是),它的内容会被您无法控制的 Shadow DOM 替换。此外,这两个元素是唯一“调整到外部资源大小”的元素。那么,当使用可变宽度(如 100%
或 75vw
)时,如何强制它们保持纵横比呢?好吧,一旦它们加载,它们就会具有其自然纵横比,所以这很好。但这也意味着它们在加载时不知道高度,并且可能会导致性能抖动重排。
一种解决方案是将它们放入具有纵横比的容器中,并使用绝对定位将其强制到角落。但是,在它们加载之前,它们本身无法正确调整到纵横比。
因此,针对“所有图像元素类型(包括 SVG 图像)和视频”的 intrinsicsize
属性目前正在开发中。
<img intrinsicsize="400x300" style="width: 100%">
说明文档 很有帮助。之所以是 intrinsicsize
而不是 aspectratio
,是因为纵横比不会提供太多有用或可用的信息。我希望它能够在任何元素上工作,并被引入 CSS 中。
拥有这个功能会非常好;感觉它应该早就存在了。不过,当我点击“正在开发中”链接并看到除了 Chrome 之外,没有其他浏览器供应商公开表示有构建意图时,我感到非常失望。如今是否有任何平台供开发人员投票选择新的 Web 标准提案,就像 IE 曾经拥有的一样?
支持度已经相当不错了,不过需要注意的是,此功能处于“工作草案”阶段,在成为活标准的一部分之前可能会发生变化。也就是说,最好在候选推荐之前不要在生产环境中使用。
检查功能实现的地方。注意:这是由社区更新的,但它相当准确。
https://caniuse.cn/#search=intrinsic
太棒了……绝对迫不及待地等待主要浏览器采用它。
感谢分享……
很确定我们在谈论两件不同的事情,不是吗?您的 caniuse 链接是关于 CSS 属性的,而这篇文章 + 我提到的链接 (https://www.chromestatus.com/feature/4704436815396864) 是关于 HTML 属性的。
抱歉。我们在谈论两件不同的事情。
我做了一个 polyfill
https://github.com/nuxodin/intrinsicsize-polyfill