+ 是唯一能按视口宽度切换不同分辨率素材的 html 原生方案,因 srcset 单独使用仅适配设备像素比(如 1x/2x),不响应视口宽度变化;若无 sizes,浏览器默认按 100vw 计算导致小屏加载大图,且混用 w 与 x 描述符会使整个 srcset 失效。

用 <picture></picture> + <source></source> 是唯一能按视口宽度切换不同分辨率素材的 HTML 原生方案,srcset 单独用只能适配 DPR(比如 1x/2x),不能响应屏幕尺寸变化。
为什么不能只靠 srcset 切换分辨率素材
srcset 本身不理解“这个图在页面里占多宽”,它只管像素密度(2x)或资源宽度(400w),但选哪张图,最终取决于 sizes 提供的布局提示。如果没写 sizes,浏览器默认按 100vw 算——小屏手机也会去加载桌面级大图,带宽白花、首屏卡顿。
更关键的是:srcset + x 描述符(如 "icon@2x.png 2x")完全无视视口宽度,只看设备像素比。iPad Pro(2x)永远走 2x 图,而一台 1080p 笔记本(1x)哪怕窗口缩到 400px 宽,也拿不到更小的图。
- 混用
w和x(如"a.jpg 400w, b.jpg 2x")会导致整个srcset失效,浏览器退回src -
sizes不是 CSS width,它是给浏览器的“估算提示”,不是强制约束 - 所有
srcset中的路径必须真实可访问,Webpack 别名(如@/assets)在 HTML 里不会被解析
<picture></picture> 的正确写法和常见报错
<picture></picture> 是唯一能按 max-width、min-width 等媒体条件精准匹配素材的方案,但它规则硬、容错低。
将 Markdown 文章转换为微信公众号兼容的纯 HTML 格式。当用户要求"转成微信格式"、"生成公众号文章 HTML"、"排版到微信草稿箱"、"微信粘贴格式"时触发。输出带内联样式的纯 HTML,微信编辑器可直接渲染,无需额外适配。支持标题、段落、列表、粗体、行内代码、表格、引用块、代码块、配图的完整转换。
-
<source></source>必须带media属性,且语法要标准:括号不能漏,写成media="(max-width: 768px)",不能是media="max-width: 768px" -
<source></source>里只能用srcset(支持w或x),不能只写src;否则部分浏览器直接忽略该<source></source> -
<img>必须放在<picture></picture>最后,且必须有src和alt,缺一不可——这是无 JS 或老浏览器的兜底项 - 媒体查询别嵌太深,像
(min-width: 320px) and (max-width: 480px) and (orientation: portrait)在部分 Android WebView 会解析失败
正确示例:
<picture><source media="(max-width: 768px)" srcset="hero-mobile-400w.jpg 400w, hero-mobile-800w.jpg 800w" sizes="100vw"><source media="(min-width: 769px)" srcset="hero-desktop-800w.jpg 800w, hero-desktop-1600w.jpg 1600w" sizes="50vw"> @@##@@ </source></source></picture>
怎么验证是否真切换了素材
别信眼睛看到的渲染效果,缩放窗口时图片看起来没变,不代表没换资源。打开 Chrome DevTools → Network → Filter img,然后拖动窗口宽度,观察请求的文件名是否随断点变化。
- 如果始终只请求同一张图,先检查
<source></source>的media是否命中(可在 Elements 面板里看对应<source></source>是否被激活) - 如果请求了新图但加载慢或失败,检查路径是否 404,尤其注意大小写和扩展名(
.JPG≠.jpg) - 用
devicePixelRatio高的设备测试时,确认你提供的@2x图尺寸确实是1x图的两倍,否则浏览器可能因“不够大”而降级
最易被忽略的一点:所有 <source></source> 的 srcset 必须用一致的描述符类型(全用 w,或全用 x),混用就等于没写;而 <img src="hero-desktop-800w.jpg" alt="首页主图"> 的 src 必须指向一个真实存在的 1x 图,不能是占位符或空字符串。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!










