浏览器按顺序选取首个匹配media且type支持的source加载,type必须与服务器content-type完全一致,多条件需分条写,兜底图须有效合理。

格式回退必须靠 type + 顺序
type 属性决定现代格式能否被采用,但前提是服务器返回的 Content-Type 必须完全一致:- 写
type="image/avif",Nginx 或 CDN 就得返回Content-Type: image/avif(大小写、拼写、前缀都不能错) - 写
type="image/webp",不能写成webp或image/jpg,否则 Chrome 显示blocked:mime-type - 顺序决定优先级:把 AVIF 放最前,WebP 次之,JPEG/PNG 作为兜底放最后或交给
—— 浏览器只取第一个支持的
多条件组合要拆开写,不能混用
想同时适配“大屏 + AVIF”和“小屏 + WebP”,就得为每种组合单独写一条- ✅ 正确:
<source media="(min-width: 1200px)" type="image/avif" srcset="hero-large.avif"></source> - ✅ 正确:
<source media="(max-width: 767px)" type="image/webp" srcset="hero-mobile.webp"></source> - ❌ 错误:
<source media="(min-width: 1200px)" srcset="hero.avif, hero.webp"></source>—— type 缺失,浏览器无法按格式选,只能当普通 URL 处理
兜底图必须真实有效,且尺寸合理
hero-fallback.jpg),不能是空值或 404 链接验证是否生效,看 Network 面板
别猜,直接打开开发者工具:- 检查请求的响应头,确认
Content-Type和你写的type完全一致 - 看加载的是哪条 source —— 如果始终只加载
的 src,大概率是 media 写错括号、断点重叠,或 type 不匹配
- 在不同设备模拟下刷新,观察是否切换了资源路径











