火次果
火次果

暂无菜单项

首页/文章/技术文章/web前端/HTML5/
打开 MD 链接

picture 的 source 顺序:被匹配规则坑过一次

发布于 2天前
2

一次改版顺手把 picture 里几条 source 的顺序调了一下,上线后手机端全在加载桌面大图 📷。流量翻倍,版面还不对。查完才彻底记住匹配规则,写下来免得再犯。

胶片相机特写
source 的排列顺序决定最终加载哪一张图

规则一:自上而下,命中即停

浏览器从上往下逐条评估 source,第一个 media 条件为真的立即生效,后面全部跳过。顺序写反,兜底条件先命中,精心准备的窄屏图就成了摆设 ⚠️。

规则二:全不命中才轮到 img

所有 source 的 media 与 type 都不通过时,才回退到内部 img 的 src 或 srcset。img 不是第一选择,是最后一道保险。

规则三:评估时机不靠 JS

media 属性只在两个时机评估:元素插入 DOM,以及窗口 resize。用 JS 动态改 media 属性不会触发重新选择,想运行时切换图片只能替换 srcset 或换 DOM。

规则四:type 先行过滤

浏览器不支持 source 声明的 type 格式时,整条 source 直接跳过,media 都不再看。所以格式降级链与断点链可以混排,互不干扰 ✅。

推荐的排列方式

断点场景按宽屏优先、窄屏兜底书写,与 min-width 从大到小对应;格式场景按 AVIF、WebP、JPEG 排列,越新越靠前。两条链各管各的,顺序思路一致:条件越具体越靠后兜底,越特殊越靠前优先。

常见问题(FAQ)

source 的匹配顺序是什么?
自上而下逐条评估,第一个 media 为真的 source 立即生效,其余全部跳过。
所有 source 都不匹配时会怎样?
回退到 picture 内部 img 的 src 或 srcset,img 承担最终兜底职责。
用 JS 修改 media 属性能切换图片吗?
不能。media 只在插入 DOM 与窗口 resize 时评估,JS 修改该属性不会触发图片重新选择。
type 属性在匹配中起什么作用?
浏览器不支持该 type 格式时直接跳过整条 source,不再评估其 media,继续向下匹配。
source 顺序推荐怎么排?
宽屏优先、窄屏兜底,配合 min-width 断点从大到小排列;格式降级链则按 AVIF、WebP、JPEG 的顺序。
media属性source标签srcset图片回退资源选择
支持作者
如果这篇内容对你有帮助,可以请作者喝杯咖啡
0 点赞
0 收藏
分享
0 讨论
反馈
0 / 600
细中粗
0 讨论
热门最新
总结
暂无总结
嗨,下午好!
所有的成功,都源自一个勇敢的开始
创作
社区
购物
会员
近期热门

暂无数据

火次果
火次果
首页
资迅中心
小店
AI导航
社区
所有的成功,都源自一个勇敢的开始
不辜负每一个勇敢的开始
关于FAQ协议
火次果 © 2026鲁ICP备2025164830号-1