前端进阶之旅前端进阶之旅
基础篇
进阶篇
高频篇
精选篇
手写篇
面经篇
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 热点
旧版
首页程序员面试题库picture srcset sizes 响应式图片
HTML语义与文档

picture、source、srcset 和 sizes 各管哪一步?

<picture> 让浏览器按条件在多个 <source> 中选来源,适合换构图或格式。每个来源的 media 或 type 决定它是否可用,srcset 提供该来源的候选文件;使用宽度描述符时,sizes 告诉浏览器预计显示宽度。最后的 <img> 是实际图像与后备来源,还承载 alt、宽高等属性。

前端进阶之旅 · 一题精讲更新于 2026.09.29
HTML#语义与文档
先看核心答案读代码示例
理解线索

先选来源,再选候选资源

  1. picture包住按屏宽或格式切换的图片来源
  2. source为某个条件提供候选文件,多个来源按顺序判断
  3. img最终图像元素承载 alt 与后备 src

它告诉浏览器预计显示尺寸,实际盒子宽度由 CSS 决定。

核心回答

先记住这个答案

<picture> 中的 <source> 提供按媒体条件或格式区分的候选,浏览器按顺序选择合适来源,内部 <img> 才是真正显示的图片和替代文本所在。窄屏换近景裁切是典型用途;若只是同一构图选择不同清晰度,直接用 <img srcset> 更简单。带宽度描述符的候选还要配合 sizes 说明预计显示宽度。

  • picture 负责条件化来源
  • source 声明媒体或格式条件
  • srcset 给出图片候选
  • img 承载后备和 alt

横图竖图各自有分辨率候选

新闻首页桌面用横向大图,手机用重新裁切的竖向图;每个版本还各有多档分辨率。<picture> 先按窄屏媒体条件选择竖图来源,再按 srcset 和 sizes 选合适的文件。若只想在同一构图下换清晰度,不必增加 <picture>,单个 <img> 的响应式候选就够。不要用 CSS 同时放两张图片再隐藏一张,可能造成多余请求。

窄屏来源内再选分辨率HTML
<picture>
  <source media="(max-width: 600px)"
          srcset="/mobile-400.jpg 400w, /mobile-800.jpg 800w"
          sizes="100vw">
  <img src="/desktop-1200.jpg" alt="活动现场的演讲者"
       width="1200" height="600">
</picture>

浏览器按顺序检查 <source>,选择第一个媒体条件和类型都适用的来源,再从它的候选里挑文件。 示例的手机来源只列竖图候选,桌面回退 <img> 只有一个横图。手机上若条件命中,实际下载源可能是 400w 或 800w,取决于 sizes 与设备密度;桌面则回到横图。检查时可以在开发工具里读 img.currentSrc,再确认页面上显示的确是期望的裁切。width、height 写在 <img> 上还可为加载前预留空间,但两种构图比例不同仍需用 CSS 安排容器。

先选来源,再选候选资源

sizes 是资源选择提示,不决定图片实际 CSS 宽度;应与布局规则一致。内层 <img> 必须存在,它负责图像语义和后备显示。给 width、height 或合适的比例可帮助预留空间,但艺术方向切换后不同构图的比例可能变化,布局也要相应处理。

窄屏 <source> 可以用重新裁切的竖图,并在它的 srcset 中列出不同像素宽度;宽屏来源则是横图的另一组候选。浏览器先看媒体条件和类型,选定来源后再结合 sizes 与设备密度挑文件,不是从所有来源里只按最大像素数挑一张。若 media 写错,图可能清晰却构图不适合当前布局。

<source> 的顺序会影响选择:前面条件已匹配且格式可用时,后面更适合的文件也可能没机会被考虑。设计上应把更具体的媒体条件放前面、默认 <img> 留在最后,并用 currentSrc 在窄屏和宽屏实际查看结果。若只想压缩格式切换,保持各格式相同构图,避免同一断点因格式支持差异显示不同内容。

回答前,多想一步

容易答错的地方

把 sizes 当成 CSS 宽度样式
它告诉浏览器预计显示尺寸,实际盒子宽度由 CSS 决定。
把 alt 写在 source 上
替代文本写在实际图像元素 <img> 上。
试着用自己的话回答

面试官还会怎么问?

为什么 source 顺序重要?

浏览器使用第一个适用来源,更具体的条件应放在前面。

同图 1x 和 2x 一定要 picture 吗?

不需要,单个 <img srcset> 就能给出密度候选。

不同裁切比例怎样避免布局跳动?

按各来源的比例安排尺寸,并测试切换条件时的占位与实际显示。

从一道题,走向一组知识

把知识连起来

语义与文档

progress 和 meter 都有数值,什么时候选哪一个?

图片加载进度如果要显示任务状态,应使用 progress 而非图片容器本身。

语义与文档

HTML5 的 required、pattern、maxlength 这些验证属性是怎么工作的?

不同来源图片都要保留后备 img,且图片作为必填上传内容时需另做表单校验。

参考资料

  • HTML:语义与文档参考资料

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

本题目录
  1. 先记住这个答案
  2. 横图竖图各自有分辨率候选
  3. 先选来源,再选候选资源
  4. 容易答错的地方
  5. 面试官还会怎么问
  6. 把知识连起来
读懂,再试着讲出来

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

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