标签本身不切换图片,仅将选择权交给浏览器;必须正确书写的media属性(含括号、合法语法)、按从宽到窄顺序排列,且必须作为最后子元素提供src和alt兜底,否则全部fallback。

<source></source> 的 media 顺序和语法,浏览器在加载阶段就会自动挑出最匹配的那一张,不卡顿、不重复下载、不依赖 JS。
为什么写了 media 却只加载 <img src alt="怎么用HTML的picture切换图片" >?
常见原因不是逻辑错,而是浏览器压根没执行匹配:
-
media="max-width: 768px"缺括号 → 浏览器静默忽略整条<source></source> -
media="768px"或media="tablet"→ 非法媒体查询,该<source></source>失效 -
<source></source>写在<img alt="怎么用HTML的picture切换图片" >后面 → 浏览器直接跳过,只加载<img src alt="怎么用HTML的picture切换图片" > - 所有
media都不匹配 → 浏览器不报错,默默 fallback 到<img src alt="怎么用HTML的picture切换图片" >,你根本看不到提示
<source></source> 的 media 顺序为什么必须从宽到窄?
浏览器从上到下扫描 <source></source>,遇到第一个为 true 的就立即加载对应资源,不再继续判断:
- ✅ 正确:先
media="(min-width: 1200px)",再media="(min-width: 768px)",最后media="(max-width: 767px)" - ❌ 错误:把
media="(max-width: 767px)"放最前 → 小屏设备永远卡在这条,宽屏规则根本没机会触发 - ⚠️ 边界重叠风险:比如同时存在
(min-width: 768px)和(max-width: 768px),768px 宽度会命中第一个,行为不可控
<img alt="怎么用HTML的picture切换图片" > 不是可选的,它是强制 fallback
漏掉它,或只写 <img alt=""> 而不带 src,会导致整个区域空白:
-
<img alt="怎么用HTML的picture切换图片" >必须存在,且必须含src和alt属性 - 不能是自闭合写法:
<img alt="怎么用HTML的picture切换图片" >或<img alt="怎么用HTML的picture切换图片" >都无效,必须写成<img src="..." alt="..."> -
<img alt="怎么用HTML的picture切换图片" >上可以(也推荐)加sizes和srcset,尤其当它作为 fallback 也要适配高 DPR 时 - 旧版 Safari(16.4 之前)完全依赖
<img src alt="怎么用HTML的picture切换图片" >渲染,缺了就白屏
最容易被忽略的其实是服务器配置
就算你写了 type="image/webp",如果服务器返回的 Content-Type 不是 image/webp,Chrome 会标记为 blocked:mime-type,直接跳过该 <source></source>,落到下一条或最终 <img alt="怎么用HTML的picture切换图片" >。
立即学习“前端免费学习笔记(深入)”;
同样,sizes 必须写在 <img alt="怎么用HTML的picture切换图片" > 上,写在 <source></source> 里会被忽略;srcset 里混用 w 和 x(比如 "photo-800w.jpg 800w, photo@2x.jpg 2x")会让整个值被浏览器丢弃。



















