在本机延迟加载期间保持 Chrome 中图像的宽高比

更新:事实证明,这是由于Chrome 中的一个错误造成的。我仍在寻找解决方法


我试图通过设置元素来在 Chrome 中使用延迟loading="lazy"加载img。我还使用以下方法让图像适合:

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

不幸的是,在 Chrome 中,在图像实际加载之前显示的图像占位符具有方形长宽比。img它不遵循元素width/属性中设置的宽高比height。这种情况发生在以下条件下:

  • 仅在 Chrome 中(不在 Firefox 75 中,Firefox 75 也支持延迟加载)。

  • 仅当设置loading="lazy". 如果没有此属性,则保留纵横比。

即使在延迟加载的情况下,是否有解决方案可以保留width/中设置的图像的纵横比?height


这是一篇文章,建议我所做的事情应该有效。另请参阅文章中嵌入的视频,也是这样说的。


如果使用 Chrome 的开发者工具限制网络速度,您可以通过下面的示例观察到问题。我提供了一个屏幕录制来说明问题。我不希望图像大小在加载后发生变化,因为它会导致页面元素移动。

https://i.stack.imgur.com/poiEP.gif

一个最小的例子

HTML:


<html>

<head>

    <link rel="stylesheet" type="text/css" href="style.css">

</head>

<body>

<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Curabitur pretium nibh tellus, ac luctus erat viverra sed. Aliquam sed nisi sed sapien tempus consectetur vestibulum vel diam. Ut vel faucibus metus. Donec non sem et purus luctus dictum nec et elit. Suspendisse et ipsum tortor. Proin eros massa, pulvinar a ante eu, imperdiet consequat dolor. Pellentesque sed lacus nulla. Mauris gravida purus sed facilisis sollicitudin.

</p>

<p>

    <img src="image.png" width="850" height="422" loading="lazy">

</p>

<p>

Vivamus sagittis faucibus elit non feugiat. Curabitur interdum nulla sed ligula pharetra, in faucibus tortor ullamcorper. Curabitur tristique libero in lobortis posuere. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Quisque quis velit sed tellus aliquet dictum. Fusce vitae consectetur lacus. In scelerisque varius euismod. Nunc scelerisque enim quis lacus dignissim tincidunt. Nulla suscipit, odio eu dictum condimentum, massa elit vestibulum leo, ut lobortis dolor felis vel erat. Cras dapibus, nunc eget sollicitudin semper, elit nisl dictum leo, non semper quam nunc consequat augue. Vivamus bibendum mauris sapien, vel sagittis urna consequat ut.

</p>

</body>

</html>

CSS:


body {

    max-width: 600px;

    padding: 20px;

}


img {

    border: solid black;

    max-width: 100%;

    height: auto;

}

图片:

https://i.stack.imgur.com/SII5r.png


Qyouu
浏览 63回答 1
1回答

青春有我

Codesandbox&nbsp;DEMO&nbsp;(源代码)也许经典的 padding-top hack 可能会有所帮助作为一种解决方法。body {&nbsp; max-width: 600px;&nbsp; padding: 20px;}img {&nbsp; border: solid black;&nbsp; max-width: 100%;&nbsp; height: auto;&nbsp; box-sizing: border-box;}@supports (--foo: 1) {&nbsp; .aspect,&nbsp; .aspect-inline {&nbsp; &nbsp; position: relative;&nbsp; }&nbsp; .aspect {&nbsp; &nbsp; padding-top: calc(var(--height) / var(--width) * 100%);&nbsp; &nbsp; height: 0;&nbsp; &nbsp; display: block;&nbsp; }&nbsp; .aspect-inline {&nbsp; &nbsp; display: inline-block;&nbsp; &nbsp; vertical-align: middle;&nbsp; }&nbsp; .aspect img,&nbsp; .aspect-inline img {&nbsp; &nbsp; position: absolute;&nbsp; &nbsp; top: 0;&nbsp; &nbsp; max-height: 100%;&nbsp; }}<p>&nbsp; <picture class="aspect-inline" style="width: 50px; height: 24.8px">&nbsp; &nbsp; <img&nbsp; &nbsp; &nbsp; src="https://i.stack.imgur.com/SII5r.png"&nbsp; &nbsp; &nbsp; loading="lazy"&nbsp; &nbsp; &nbsp; width="50"&nbsp; &nbsp; &nbsp; height="24,8"&nbsp; &nbsp; />&nbsp; </picture>&nbsp; Lorem ipsum dolor sit amet, consectetur adipiscing elit. Curabitur pretium&nbsp; nibh tellus, ac luctus erat viverra sed. Aliquam sed nisi sed sapien&nbsp; tempus consectetur vestibulum vel diam. Ut vel faucibus metus. Donec non&nbsp; sem et purus luctus dictum nec et elit. Suspendisse et ipsum tortor. Proin&nbsp; eros massa, pulvinar a ante eu, imperdiet consequat dolor. Pellentesque&nbsp; sed lacus nulla. Mauris gravida purus sed facilisis sollicitudin.</p><p>&nbsp; <picture class="aspect" style="--width: 850; --height: 422">&nbsp; &nbsp; <img&nbsp; &nbsp; &nbsp; src="https://i.stack.imgur.com/SII5r.png"&nbsp; &nbsp; &nbsp; loading="lazy"&nbsp; &nbsp; &nbsp; width="850"&nbsp; &nbsp; &nbsp; height="422"&nbsp; &nbsp; />&nbsp; </picture></p><p>&nbsp; Vivamus sagittis faucibus elit non feugiat. Curabitur interdum nulla sed&nbsp; ligula pharetra, in faucibus tortor ullamcorper. Curabitur tristique&nbsp; libero in lobortis posuere. Pellentesque habitant morbi tristique senectus&nbsp; et netus et malesuada fames ac turpis egestas. Quisque quis velit sed&nbsp; tellus aliquet dictum. Fusce vitae consectetur lacus. In scelerisque&nbsp; varius euismod. Nunc scelerisque enim quis lacus dignissim tincidunt.&nbsp; Nulla suscipit, odio eu dictum condimentum, massa elit vestibulum leo, ut&nbsp; lobortis dolor felis vel erat. Cras dapibus, nunc eget sollicitudin&nbsp; semper, elit nisl dictum leo, non semper quam nunc consequat augue.&nbsp; Vivamus bibendum mauris sapien, vel sagittis urna consequat ut.</p>
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Html5