前端进阶之旅前端进阶之旅
基础篇
进阶篇
高频篇
精选篇
手写篇
面经篇
AI 篇
原理篇
每日一题
小程序题库
知识卡片
  • 场景篇按分类整理的大前端场景考点
  • 历年面经按年份追踪真实考点
  • 算法题库NEW在线编码即时判题
  • 专项自测100 题快速查漏
  • 前端基础
    • HTTP从报文一路讲到 HTTPS
    • 浏览器渲染、事件循环、进程
    • 计算机基础Linux、网络、操作系统
  • 进阶专项
    • 设计模式23 种模式怎么用
    • 前端系统进阶学习大型项目工程化
    • 前端综合文章长期沉淀的实践文
  • 工程与工具
    • Node学习指南从环境搭建到服务端
    • NPM工作流script、依赖与发布
    • Docker容器化部署上手
    • Canvas图形与动画实战
  • 路线与导图
    • 思维导图知识点全景图
    • 学习路线按图索骥不跑偏
  • 动态
    • 公众号动态公众号历史文章
    • 博客动态站长的技术博客
    • 开发者导航常用工具与文档站
  • AI 助手随时提问,即时解析
  • AI 模拟面试模拟真实面试 + 报告
  • AI 知识地图串起全站知识点
  • AI 定制路线按你的简历现排
AI 热点
旧版
基础篇
进阶篇
高频篇
精选篇
手写篇
面经篇
AI 篇
原理篇
每日一题
小程序题库
知识卡片
  • 场景篇按分类整理的大前端场景考点
  • 历年面经按年份追踪真实考点
  • 算法题库NEW在线编码即时判题
  • 专项自测100 题快速查漏
  • 前端基础
    • HTTP从报文一路讲到 HTTPS
    • 浏览器渲染、事件循环、进程
    • 计算机基础Linux、网络、操作系统
  • 进阶专项
    • 设计模式23 种模式怎么用
    • 前端系统进阶学习大型项目工程化
    • 前端综合文章长期沉淀的实践文
  • 工程与工具
    • Node学习指南从环境搭建到服务端
    • NPM工作流script、依赖与发布
    • Docker容器化部署上手
    • Canvas图形与动画实战
  • 路线与导图
    • 思维导图知识点全景图
    • 学习路线按图索骥不跑偏
  • 动态
    • 公众号动态公众号历史文章
    • 博客动态站长的技术博客
    • 开发者导航常用工具与文档站
  • AI 助手随时提问,即时解析
  • AI 模拟面试模拟真实面试 + 报告
  • AI 知识地图串起全站知识点
  • AI 定制路线按你的简历现排
AI 热点
旧版
首页程序员面试题库响应式图片 WebP AVIF 格式选择 picture type
CSS响应式设计

响应式图片选 AVIF、WebP 时该用 picture 还是 srcset?

格式切换用 <picture> 中带 type 的 <source>,保留 <img> 回退;同一格式按显示尺寸选文件用 srcset。srcset 的描述符是宽度 w 或密度 x,不是图片格式的 type 描述符。

前端进阶之旅 · 一题精讲更新于 2026.09.29
CSS#响应式设计
先看核心答案读代码示例
理解线索

格式与分辨率分别选择

  1. <picture>按格式或媒体条件选择图片源
  2. type提示浏览器候选源的 MIME 类型
  3. srcset列出不同宽度或像素密度文件

type 是 <source> 的属性,不是 srcset 候选后面的描述符。

核心回答

先记住这个答案

要在 AVIF、WebP 和普通格式之间选择,使用 <picture> 的多个 <source type="...">,末尾保留 <img> 作为回退并提供 alt。要在同一格式里按显示宽度或像素密度选文件,用 srcset 的 w 或 x 描述符。srcset 没有 type 描述符;格式与尺寸是两条独立的选择维度,可以在 <source> 上同时使用 type 和 srcset。

  • <source type> 用于格式候选
  • srcset 用于尺寸或密度候选
  • <img> 提供回退和 alt
  • 按实际图片测试压缩与画质

先选能解码的格式

文章封面有 AVIF、WebP 和 JPEG 三份。浏览器会从上到下考察 <source>,选择支持的源;如果都不合适,就用最后的 <img>。替代文本只需写在实际图片元素上。

格式候选与回退HTML
<picture>
  <!-- 浏览器按顺序选择能解码的格式 -->
  <source type="image/avif" srcset="cover.avif">
  <source type="image/webp" srcset="cover.webp">
  <img src="cover.jpg" alt="山间步道上的行人" width="800" height="450">
</picture>

浏览器优先选择能解码的格式,<img> 既是回退,也是承载 alt 的实际图片元素。不要写所谓的 srcset="a.avif type(image/avif)";那不是合法的 srcset 描述符语法。 不同照片、插画和透明图的压缩表现不同。选择 AVIF 或 WebP 前,比较实际文件体积、画质以及编码成本,不要假设某格式总是最小。

再按显示尺寸选文件

一张图在手机可能只显示 320px 宽,在桌面主栏可能显示 800px。给同一格式提供多个宽度候选时,sizes 告诉浏览器预期的 CSS 显示宽度,它再结合 DPR 选择合适文件。

不要把 HTML 的 width 与 height 属性当成要求浏览器只下载固定尺寸,它们主要提供固有尺寸和布局占位。实际显示宽度还受 CSS 控制。资源选择最终由浏览器完成,网络条件和缓存也可能影响决定。

格式优先级也应由文件实际表现决定,而非把 AVIF 固定排在第一位就结束。对有文字和细线的截图,强压缩可能让字边发糊;透明插画也可能与照片表现不同。准备候选时用同一显示尺寸比较清晰度与字节数,再把确实合适的格式按顺序放进 <picture>。如果只提供一种格式,也不必为了形式套一层 <picture>。

回答前,多想一步

容易答错的地方

以为 srcset 支持 type 描述符
srcset 候选使用 w 或 x 等描述符;MIME 类型应写在 <source> 的 type 属性。
删掉 <img> 只留 <source>
<picture> 需要内部的 <img> 作为实际图片与回退,也承载 alt。
试着用自己的话回答

面试官还会怎么问?

w 和 x 描述符什么时候用?

显示宽度变化较大时配合 sizes 用 w;显示尺寸固定但需高密度资源时可用 x。

能按窄屏改构图吗?

可以在 <source> 上用 media 指定不同裁切版本,这属于艺术方向选择,而不只是压缩格式变化。

AVIF 一定优于 WebP 吗?

不一定。照片类型、质量设置、解码成本与浏览器支持范围都要看实际素材和目标环境。

从一道题,走向一组知识

把知识连起来

响应式设计

给高 DPR 屏幕双倍图时,显示尺寸到底怎么设?

DPR 决定同样 CSS 显示尺寸下需要多少源像素。

响应式设计

CSS 逻辑属性怎么适配从左到右和从右到左的排版?

图片与文字并排时,<picture> 选资源,逻辑内边距负责适配 RTL 的留白方向。

参考资料

  • MDN 参考文档

示例用于理解所注明的运行环境与边界;延伸学习可结合原文中的更多案例。

本题目录
  1. 先记住这个答案
  2. 先选能解码的格式
  3. 再按显示尺寸选文件
  4. 容易答错的地方
  5. 面试官还会怎么问
  6. 把知识连起来
读懂,再试着讲出来

先看核心答案,再读代码。最后展开追问,检查自己有没有遗漏边界。

试着回答追问
浏览全部面试题理解原理,也关注真实的使用场景。回到顶部 ↑