浏览器未加载高清图导致模糊,主因是srcset/sizes配置错误或未验证实际请求;必须用合法sizes配合x/w描述符、避免混用、确保高DPR图存在且路径正确,并通过DevTools Network面板确认真实加载的图片。

为什么写了 还是模糊?
最常见原因是浏览器根本没选到你准备的高清图,静默回退到 或低分辨率
-
media值缺括号,比如写成media="max-width: 768px"→ 浏览器直接忽略整条<source> -
sizes没写或写错单位,比如sizes="50%"或sizes="300px"→ 浏览器按默认100vw估算,结果在 1440px 宽视口下仍拉 800w 图 -
srcset里混用w和x描述符,比如"photo-800w.jpg 800w, photo@2x.jpg 2x"→ Safari 可能跳过整条,降级到<img> - 没提供高 DPR 版本:只放了
photo-1200w.jpg,但没配photo@2x.jpg 2x→ DPR=2 的 iPhone 就只能拉 1200w 图再缩放渲染,等效画质≈600w
怎么让高分屏真正加载高清图
靠 srcset + sizes 组合,不是靠 media。后者切构图,前者才管分辨率适配。
- 在
<img>上写srcset,用x描述符:例如srcset="photo.jpg 1x, photo@2x.jpg 2x, photo@3x.jpg 3x" -
sizes必须存在且合法:例如sizes="(max-width: 768px) 100vw, (max-width: 1200px) 50vw, 33vw"—— 这个值要和你 CSS 里图片实际占位宽度一致 - 把
3x图放在srcset最右边:浏览器从左到右匹配,DPR=3 设备会跳过1x和2x,命中3x;如果1x在最后,它永远不被选 -
<img>的src必须指向一张可用的 1x 图:它是所有不支持srcset的老浏览器唯一入口,也是 DPR=1 时的保底
WebP/AVIF 真的能提画质吗?
不能直接提画质,但能让你在同等文件体积下塞进更高分辨率、更少压缩伪影的图——间接实现“更清晰”。前提是服务端返回的 Content-Type 和 type 属性严格一致。
- 写
type="image/webp",但 Nginx 返回Content-Type: image/jpg(拼写错或大小写错)→ Chrome 标记为blocked:mime-type,跳过该源 - WebP/AVIF 源必须放在 JPEG/PNG 之前:浏览器顺序匹配,第一个格式支持+条件满足就停
- 别只换格式不重压:把原 1200w JPEG 直接转 WebP 不压缩,文件可能更大,得用 Squoosh 或 cwebp 调参
- AVIF 支持度仍有限(Safari 16.4+ 才稳定),
type="image/avif"建议放在 WebP 之前、JPEG 之后,形成 avif → webp → jpg 三级降级



















