HTML Academy · 课时

使用 srcset 和 sizes 实现响应式图像

为不同屏幕密度提供尺寸合适的图像。

第 2 / 4 课14 个步骤

使用 srcset 和 sizes 实现响应式图像 是 CoddyKit 上的免费 HTML Academy 课时。 这是第 2 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 HTML Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 HTML Academy 课程共包含 4 节课。

单一图像的问题

向所有设备提供同一张大图,会浪费小屏幕上的带宽:

  • 屏幕宽度为 390px 的手机不需要 2400px 的图像
  • 4K 显示器应使用比 96dpi 更高分辨率的图像
  • 响应式图像会为合适的屏幕提供合适的图像

srcset 属性

srcset 提供带有宽度信息的图像来源列表:

<img
  src="photo-800.jpg"
  srcset="
    photo-400.jpg  400w,
    photo-800.jpg  800w,
    photo-1600.jpg 1600w
  "
  alt="Mountain landscape"
>
<!-- 400w, 800w, 1600w = intrinsic widths of each file -->
<!-- Browser chooses the best match for the device -->
<!-- src is the fallback for browsers that don't support srcset -->

像素密度描述符

对于不同分辨率下的固定尺寸图像,请使用 1x、2x 和 3x 描述符:

<img
  src="logo.png"
  srcset="logo.png 1x, logo@2x.png 2x, logo@3x.png 3x"
  alt="Coddy logo"
  width="120"
  height="40"
>
<!-- 2x screens (Retina) get logo@2x.png -->
<!-- 3x screens (iPhone Pro) get logo@3x.png -->
<!-- 1x screens get logo.png -->

sizes 属性

sizes 告诉浏览器图像在不同视口尺寸下的显示宽度:

<img
  src="photo-800.jpg"
  srcset="photo-400.jpg 400w, photo-800.jpg 800w, photo-1600.jpg 1600w"
  sizes="(max-width: 600px) 100vw,
         (max-width: 1200px) 50vw,
         800px"
  alt="Landscape photo"
>
<!-- At ≤600px viewport: image takes 100% of viewport width -->
<!-- At ≤1200px viewport: image takes 50% -->
<!-- Otherwise: image is 800px wide -->

浏览器如何选择图像

浏览器会计算:sizes 值 × 设备像素比,然后从 srcset 中选择图像:

  • 600px 视口、2× DPR、size=100vw → 需要 1200px 图像 → 选择 1600w
  • 1200px 视口、1× DPR、size=50vw → 需要 600px 图像 → 选择 800w
  • 加载后,浏览器会缓存图像,之后可能不会重新加载

默认 sizes 值

没有 sizes 时,浏览器会假设图像占据整个视口宽度(100vw):

<!-- Without sizes: browser assumes 100vw -->
<!-- This causes it to download a very large image on wide screens -->
<!-- Always specify sizes if your image is not full-width -->

<img
  srcset="hero-800.jpg 800w, hero-1600.jpg 1600w"
  sizes="100vw"  <!-- explicit full-width -->
  src="hero-1600.jpg"
  alt="Hero image"
>

srcset 宽度描述符与 x 描述符

srcset 有两种模式:

  • 宽度描述符(w)——与 sizes 搭配使用:根据流式布局智能选择
  • 像素密度描述符(x)——适用于多种分辨率的固定尺寸图像

大多数响应式图像应使用 w 描述符。图标、标志和固定尺寸元素应使用 x。

生成 srcset 文件

用于生成响应式图像变体的工具:

  • Sharp(Node.js)——以编程方式调整图像大小
  • Squoosh——基于浏览器,支持可视化比较
  • Cloudinary / Imgix——基于网址按需调整大小
  • Webpack / Vite 插件——在构建时生成

srcset 与 WebP 及回退格式

将 srcset 与 <picture> 结合使用,以提供格式回退:

<picture>
  <!-- Modern browsers: WebP -->
  <source
    type="image/webp"
    srcset="photo-400.webp 400w, photo-800.webp 800w"
    sizes="(max-width: 600px) 100vw, 50vw"
  >
  <!-- Fallback: JPEG -->
  <img
    srcset="photo-400.jpg 400w, photo-800.jpg 800w"
    sizes="(max-width: 600px) 100vw, 50vw"
    src="photo-800.jpg"
    alt="Mountain photo"
  >
</picture>

艺术指导与分辨率切换

响应式图像有两类问题:

  • 分辨率切换——同一张图像使用不同分辨率 → 使用 srcset + sizes
  • 艺术指导——不同屏幕使用不同裁剪或构图 → 使用带有 <source media> 的 <picture>

测试响应式图像

验证 srcset 是否正常工作的方法:

  • 打开 DevTools → Network 标签页 → 筛选 Images
  • 将设备模拟设置为不同的视口尺寸和 DPR
  • 重新加载页面——检查浏览器请求了哪个文件
  • 另外检查:Lighthouse → Performance → Properly sized images 审计

srcset 浏览器支持

浏览器对 srcset 的支持非常完善:

  • 所有现代浏览器均支持(Chrome、Firefox、Safari、Edge)
  • src 回退可处理旧版浏览器
  • 用于生产环境时不需要填充程序

快速检查

sizes 属性会告诉浏览器什么信息?

回顾:srcset 和 sizes

响应式图像要点:

  • srcset——包含图像固有宽度或像素密度的图像文件列表
  • sizes——描述图像显示宽度的媒体条件
  • 浏览器选择最佳匹配项:sizes 值 × 设备 DPR
  • 流式图像使用宽度描述符(w);固定尺寸元素使用 x
  • 始终提供 src 作为回退
免费开始

用 AI 导师学习 HTML — 免费

在浏览器中编写并运行真实代码,获得全天候 AI 导师的即时帮助,并在网页或应用中继续学习。

课程
40
课程
159

常见问题解答

「使用 srcset 和 sizes 实现响应式图像」课时是免费的吗?

是的 — 「使用 srcset 和 sizes 实现响应式图像」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 HTML Academy 课程的其余内容,请升级到 CoddyKit PRO。 HTML Academy 课程共包含 4 节课。

「使用 srcset 和 sizes 实现响应式图像」这节课中我会学到什么?

为不同屏幕密度提供尺寸合适的图像。 你通过在浏览器中直接运行的动手代码来练习 HTML Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。

学习 HTML Academy 需要有经验吗?

无需任何先前经验。CoddyKit 上的 HTML Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 2 节课,共 4 节。

「使用 srcset 和 sizes 实现响应式图像」课时需要多长时间?

大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。

我能在这节 HTML Academy 课中编写并运行代码吗?

能。每节 HTML Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。

此课程中的所有课时

  1. img 元素:src、alt、width 与 height
  2. 使用 srcset 和 sizes 实现响应式图像
  3. 用于艺术指导的 picture 元素
  4. figure 与 figcaption
← 返回 HTML Academy