前端进阶之旅前端进阶之旅
基础篇
进阶篇
高频篇
精选篇
手写篇
面经篇
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 热点
旧版
首页程序员面试题库HTML picture element srcset media art direction
CSS响应式设计

什么时候用 picture,而不是只给 img 写 srcset?

同一张图只需要不同分辨率或显示宽度时,通常用 <img> 的 srcset 和 sizes。如果不同视口要换构图、裁切或格式候选,可用 <picture> 包住多个 <source>,按 media 或 type 选择候选来源。最终仍要保留 <img>,它提供后备源、替代文字和实际图片元素。

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

先选来源,再选来源中的候选

  1. <picture>包住不同构图或格式的来源,让浏览器选择合适分支
  2. <source>用媒体条件与 srcset 声明该分支的图片候选
  3. <img>实际显示图片并承载 alt;没有合适 source 时作回退

两张 <img> 可能都被请求;使用 <picture> 让浏览器按条件选来源更合适。

核心回答

先记住这个答案

<picture> 让浏览器按顺序检查 <source> 的媒体条件或图片格式,随后仍由内部 <img> 承担实际图像与替代文字。换构图,例如窄屏改用人物近景,才需要这种不同来源;同一张图只调整清晰度或显示宽度,<img srcset> 往往足够。把两种用途混用会让资源选择难以检查。

  • 同构图换清晰度优先 srcset
  • 换裁切构图可用 <picture>
  • media 决定 <source> 是否可用
  • 内层 <img> 承载 alt

手机横幅需要重新裁图

首页横幅桌面版是宽画幅,主体在左;手机上直接缩小会把人物缩到看不清。可在 <picture> 里给窄屏一张重新裁过的竖版图,宽屏使用横版图。这叫艺术方向切换,改变的是画面内容;如果两张图构图相同,只是像素密度不同,用同一 <img> 的 srcset 就更直接。浏览器会先筛选匹配的 <source>,再从该来源的候选里挑资源。

手机与桌面换构图HTML
<picture>
  <source media="(max-width: 600px)" srcset="/hero-mobile.jpg">
  <img
    src="/hero-desktop.jpg"
    alt="团队在白板前讨论产品方案"
    width="1200" height="600">
</picture>

<source media> 使用媒体查询条件,控制哪组图片候选可用;它不等同于 CSS 里给元素改宽度。 上面的代码只给手机和桌面各一个文件,已经足以说明艺术指导:手机用近景,桌面用宽幅。生产环境若希望同一构图兼顾高密度屏,可把各分支的 srcset 扩成多个宽度候选,再配 sizes 告诉浏览器大致显示宽度。不要在 <source> 中漏写 srcset 后指望它的 src 像 <img> 一样生效。

先选来源,再选来源中的候选

命中来源之后,若还提供多个 srcset 候选,浏览器会继续根据描述符和 sizes 等信息选文件。<picture> 本身不是最终承载替代文字的图像节点;alt 应写在内部 <img>。选择不同格式时可用 type,并给不支持该格式的环境保留后备来源。

一张横版海报直接缩进手机卡片时,人物可能被裁到画面边缘;这不是增加像素密度能解决的问题。窄屏 <source> 可指向重新裁切的竖版图,宽屏再用原横图,各来源内部仍能各列出多个清晰度候选。无论选中哪一支,<img> 上的 alt 应概括当前内容共同传达的信息;如果两张图传达不同含义,就需要重新审视文案。

排查资源选错时,在 DevTools 中检查图片的 currentSrc,它显示浏览器最终选择的 URL;看 HTML 里排在第一位的 <source> 不够。还要核对 media 条件、服务器返回的格式,以及 sizes 是否描述真实布局宽度。浏览器可能在宽度变化后继续使用已下载的更大图片以利用缓存,所以测试时最好以新的加载环境核对。

回答前,多想一步

容易答错的地方

用 CSS 隐藏桌面图和手机图
两张 <img> 可能都被请求;使用 <picture> 让浏览器按条件选来源更合适。
忘记内层 <img> 的 alt
替代文字属于实际图像元素,不能因为外面有 <picture> 就省略。
试着用自己的话回答

面试官还会怎么问?

同图不同 1x、2x 资源需要 picture 吗?

通常不需要,<img srcset="... 1x, ... 2x"> 已能表达密度候选。

media 与 sizes 各管什么?

media 选择 <source> 是否适用,sizes 描述候选图在布局中的预期显示宽度。

为什么还要写 img src?

它是后备资源和实际图像元素,也承载 alt、宽高等属性。

从一道题,走向一组知识

把知识连起来

响应式设计

怎样用 prefers-color-scheme 自动切换深色主题?

深浅主题需要不同插画时,<source media> 也可查询配色偏好。

响应式设计

网页打印时,@media print 应重点改什么?

图片在打印介质中的选择与屏幕布局不同,打印样式要检查是否保留关键图片。

参考资料

  • CSS:响应式设计参考资料

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

本题目录
  1. 先记住这个答案
  2. 手机横幅需要重新裁图
  3. 先选来源,再选来源中的候选
  4. 容易答错的地方
  5. 面试官还会怎么问
  6. 把知识连起来
读懂,再试着讲出来

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

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