标准答案

  1. srcset 提供多张候选图片,浏览器会结合 DPR、视口宽度和网络情况选择合适资源。
  2. sizes 告诉浏览器这张图在不同视口下大概会显示多宽,主要配合 srcset 的宽度描述符使用。
  3. loading 控制加载时机,lazy 适合非首屏图片,eager 适合需要尽早加载的关键图片。
  4. decoding 控制解码方式,async 表示允许浏览器异步解码,减少图片解码阻塞渲染的概率。
  5. 首屏 LCP 主图通常不要 lazy;同时 img 要写 width 和 height 或预留比例,避免图片加载后造成布局偏移。

题目解析

  • srcset:提供不同宽度或不同 DPR 的图片候选。
  • sizes:描述图片最终展示宽度,主要配合宽度描述符使用。
  • loading:lazy 表示延迟加载,eager 表示尽早加载。
  • decoding:async 表示可异步解码,sync 表示同步解码,auto 由浏览器决定。

如果 sizes 写错,浏览器可能下载过大的图片,浪费带宽。首屏关键图片如果设置 lazy,可能延迟 LCP。图片必须写 width 和 height 或使用 CSS 预留比例,避免布局偏移。

代码示例

文章卡片、商品图、头像列表等非首屏图片可以这样写。首屏 LCP 图通常不要 lazy。

HTML
<img
  src="/images/article-800.webp"
  srcset="/images/article-400.webp 400w, /images/article-800.webp 800w, /images/article-1200.webp 1200w"
  sizes="(max-width: 720px) 100vw, 680px"
  width="800"
  height="450"
  loading="lazy"
  decoding="async"
  alt="文章封面图"
>

常见误区

  • 只写 srcset 不写 sizes,导致浏览器按默认 100vw 估算,资源选择不准。
  • 所有图片都 lazy,包括首屏主图,反而拖慢关键渲染。
  • alt 写成文件名或关键词堆叠,不能表达图片含义。

作者信息