必须用仅当需艺术指导或格式降级:如按屏幕尺寸切换构图、优先avif并回退webp/jpeg、或media与type双条件组合匹配;其余情况一律用 srcset/sizes实现响应式。

绝大多数情况下,你应该用 <img>,而不是 <picture></picture>;只有当 <img> 无法满足「艺术指导」或「格式降级」需求时,才必须上 <picture></picture>。
什么时候必须用 <picture></picture>?
不是“更高级就该换”,而是 <picture></picture> 解决的是 <img> 根本做不到的事:
- 需要为手机裁一张竖版特写、为桌面展示宽幅全景图——
<source media="(min-width: 768px)"></source>这类条件切换,<img>完全不支持 - 想优先用
image/avif,但必须给不支持的浏览器回退到image/webp或image/jpeg——<source type="image/avif"></source>是<picture></picture>独有的能力 - 要同时按屏幕尺寸 + 图片格式组合匹配(比如“大屏且支持 AVIF”才加载
large.avif)——<source></source>支持media和type双条件叠加,<img>的srcset只能处理分辨率维度
<img> 的响应式能力被严重低估了
很多人以为 <img> 只能塞一个 src,其实它原生支持完整的响应式图片逻辑:
将调研报告、方案对比、数据分析、需求梳理、会议纪要、设计说明、代码评审、学习笔记等任务产物输出为可在浏览器直接打开的单文件 HTML,替代 Markdown 作为最终交付物。Markdown 在信息密度、视觉清晰度和可分享性上已跟不上 AI 产物的丰富度,HTML 能同时承载排版、表格、SVG 等。
-
srcset告诉浏览器“我有这些分辨率版本”,比如small.jpg 400w, medium.jpg 800w, large.jpg 1200w -
sizes告诉浏览器“在不同视口下,这张图大概占多宽”,比如(max-width: 600px) 100vw, (max-width: 1200px) 50vw, 33vw - 浏览器自动算出当前设备最合适的宽度,再从
srcset中选最接近的资源——整个过程无需 JS,无兼容性风险 - 写法简洁:
<img src="medium.jpg" srcset="..." sizes="..." alt="...">就够了,不需要包裹<picture></picture>
容易踩的坑:误用 <picture></picture> 反而降低性能
常见错误操作会拖慢加载、增加维护成本:
- 只为了“多个尺寸”就套
<picture></picture>,比如里面只写一个<source srcset="a.jpg 400w, b.jpg 800w"></source>——这纯属冗余,<img>原生就能干,还少一层 DOM -
<picture></picture>里漏掉<img>标签,导致所有浏览器都 fallback 失败,图片直接不显示 - 把
<source></source>顺序写反,比如把宽屏media="(min-width: 1200px)"放在前面,窄屏规则放在后面——浏览器按顺序匹配,第一个满足的就停,结果小屏也加载了大图 - 在 React/Vue 组件里无差别封装
<picture></picture>,但实际业务图几乎全是单构图+JPEG/JPG,白加一层抽象
<picture></picture> 的 <img> 不是摆设
<picture></picture> 最后那个 <img> 不是可选项,是强制兜底项:
- 所有
<source></source>都不匹配时,浏览器必须加载它的src - 它的
alt属性是整组图片的无障碍描述,不能空着或乱写 - 即使你写了
<source type="image/avif"></source>,也要保证<img src="fallback.jpg">是真实存在的、可访问的资源 - 别试图在
<img>里再写srcset——它只负责兜底,不参与响应式选择
真正复杂的点在于判断「要不要切构图」和「要不要保格式」——这两个问题一旦存在,<picture></picture> 就不可替代;但只要图片内容一致、仅需适配尺寸,<img> 就是最简、最稳、最兼容的选择。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!










