【发布时间】:2021-03-02 01:30:14
【问题描述】:
在 Chrome DevTools 中运行 Lighthouse,它说 CLS(累积布局转换)需要改进。
我知道现代浏览器现在根据图像的width 和height 属性设置图像的默认纵横比。因此,最佳做法是应设置width 和height 属性以防止布局变化。
尽管如此,我还是省略了设置 width 和 height 属性,因为这是我让它按照我想要的方式工作的唯一方法(请参阅下面的代码)。
因为我有 WebP 格式的图像(带有 png 后备),我不得不使用 <picture> 元素(以便不支持 WebP 的浏览器获得图像的 png 版本)。请注意,我使用的是相同图像的不同尺寸版本。
因此,如果我没有使用 WebP 格式,我会单独使用 <img> 而不是 <picture>。多亏了纵横比,问题就会得到解决。
正如您在下面的代码 sn-p 中看到的,在这个特定示例中,同一张图片有两个版本。在<img> 中设置width="245" 和height="600" 会导致我的两个不同尺寸版本的相同图像 的最大尺寸为245 x 600px(它当然会根据具有较小的视口)。根据我的媒体查询,对于更宽的视口(最小宽度:813px),我提供相同图像的较大版本,但在<img> 中设置width 和height,图像会缩小到 245 x 600 像素。
现在回答我的问题;如果可能的话,我可以做些什么来为我的<img> 元素在我的<picture> 元素中设置width 和height 属性以防止布局变化(并且这样做还可以获得其他好处,例如更快的加载次)?因此,如何让浏览器利用纵横比以正确的方式显示我的图像?
我非常感谢有人对此提供指导。
谢谢/卡尔
<picture>
<source
media="(max-width: 812px)"
srcset="image-245w.webp"
type="image/webp"
>
<source
media="(min-width: 813px)"
srcset="image-332w.webp"
type="image/webp"
>
<source
media="(max-width: 812px)"
srcset="image-245w.png"
type="image/png"
>
<source
media="(min-width: 813px)"
srcset="image-332w.png"
type="image/png"
>
<img class="img-fluid" src="image-245w.png" alt="image">
</picture>
【问题讨论】:
-
好吧,从技术上讲,您没有应用高度或宽度。这个 sn-p 中没有包含高度或宽度的 css。在编辑之前,您拥有属性:
width="600",这在技术上是行不通的。 600什么?宽度 = 600 根香蕉?西红柿?...您还需要命名一个单元,例如px, vw/vh, em, %... -
您好,是的,我在文本中省略了 px。实际上,您没有在属性“宽度”和“高度”中指定任何内容。正确的是 width="245" height="600" 没有 px、em 或任何东西。
-
我发现,在 HTML 规范中为
<source>定义了width和height。 html.spec.whatwg.org/multipage/…。在<picture>元素内使用时。但是我没有测试如果没有 CLS 是否可以工作