Picture标签本身不提供降级,真正起作用的是内部source顺序、type判断及最后img兜底;浏览器按source从上到下逐个检查,必须同时满足media(若存在)和type(浏览器支持该MIME类型)才加载,否则回退至img的src。
Picture 标签本身不提供降级,真正起作用的是内部 source 的顺序 + type 判断 + 最后那个 img 兜底。浏览器不会“尝试所有格式”,而是按 source 从上到下逐个检查:必须同时满足 media(如果写了)和 type(浏览器支持该 MIME 类型),才选中并加载;一旦选中,就停止往下看。没一个匹配,才用
的 src。现代项目主流是 WebP → AVIF → JPEG/PNG。但顺序不能只看“新不新”,得看实际覆盖范围:
浏览器靠 type 决定“跳过还是加载”,不是靠文件后缀。写错等于白写:
type="image/webp"、type="image/avif"
type="webp"(缺 image/ 前缀)、type="image/jpg"(标准是 jpeg)、type="image/png"(虽然能识别,但 不需要 type,只用于 source)type="image/*" 或空着——浏览器无法判断,可能发请求再失败,浪费带宽哪怕你写了十个 source,只要没
,整个 picture 就渲染为空白,且无障碍阅读器读不到替代文本:浏览器看到 type="image/webp",就会期望服务器返回 Content-Type: image/webp。如果返回 text/plain 或 application/octet-stream,这个 source 就被静默忽略——DevTools 里看不到报错,只少加载一张图:
curl -I https://site.com/photo.webp