sqip占位图是用少量多边形抽象原图轮廓并叠加模糊的内联svg,体积小、可缩放、保留构图与主色;需手动写polygon+filter,控制数量、禁抗锯齿、关动画、匹配尺寸。

模糊加载(LQIP / SQIP)本身不是降级,而是视觉优化手段;真正需要降级的是“模糊图加载失败”或“高清图替换失败”时的兜底路径。只放一张 base64 模糊图 + data-src,断网或 JS 失败就只剩模糊图甚至白屏——这不是降级,是单点依赖。
为什么 LQIP 图片会白屏而不是变模糊
常见错误是把模糊图全靠 src 写成 data URL,而高清图只存在 data-src 里,且没做 JS 初始化兜底。结果:
– 浏览器不支持 IntersectionObserver 或 JS 加载失败 → data-src 永远不读取 → 只显示模糊图(还行)
– 但若模糊图本身是无效 data URL(比如漏了 base64,)、或被 CSS 隐藏(display: none)、或 src 被写成空值 → 直接白屏
– 更隐蔽的是:服务端返回的模糊图 HTTP 状态码是 200,但内容为空(如 Nginx 返回 200 + 空 body),onerror 不触发
-
src必须指向一个确定可用的资源:推荐用最小合法 data URL,例如data:image/gif;base64,R0lGODdhAQABAPAAAP8AAAAAACwAAAAAAQABAAACAkQBADs=(1×1 透明 GIF) - 如果要用 LQIP,必须确保其 data URL 完整、无换行、MIME 类型正确(
image/svg+xml或image/jpeg) - 别把模糊图逻辑全塞进 JS:HTML 中
src就得能独立撑住首屏渲染
如何让模糊加载真正可降级
关键不是“怎么生成模糊图”,而是“模糊图失效后,还能否加载出可用图”。这要求三态分离:src(最低保障)、data-src(高清图)、onerror(加载失败兜底)必须协同,且不依赖外部 JS 才能生效。
文章转信息图。将文章/笔记转化为手机可读的 HTML 信息图,自动匹配视觉风格。触发场景:文章转图、笔记转图、信息图、转小红书图、做张图、可视化这篇文章、文生图。
-
src设为内联 1px GIF 或轻量 SVG 占位图(保证体积 -
data-src必须静态存在于 HTML 中(不能 JS 动态写入),例如<img src="..." ...> - 内联脚本做初始化:
<script> if ('IntersectionObserver' in window) { const obs = new IntersectionObserver((entries) => { entries.forEach(e => { if (e.isIntersecting) { const img = e.target; if (img.dataset.src && !img.hasAttribute('data-loaded')) { img.src = img.dataset.src; img.setAttribute('data-loaded', 'true'); img.onerror = () => img.src = '/placeholder.svg'; obs.unobserve(img); } } }); }, { rootMargin: '100px' }); document.querySelectorAll('img[data-src]').forEach(i => obs.observe(i)); } else { // 降级:直接加载高清图,不懒加载 document.querySelectorAll('img[data-src]').forEach(i => i.src = i.dataset.src); } </script>
哪些 CSS 会让模糊加载降级失效
即使 JS 和 HTML 都写对了,一行 CSS 就能让整个模糊加载链归零——它在断网时仍生效,且浏览器不报错。
-
display: none:Safari 和多数 Android WebView 下,IntersectionObserver直接跳过该元素,后续display: block也不会补触发 -
overflow: hidden包裹容器 + 图片初始位置超出裁剪区 → iOS WebKit 判定为“不可见”,不触发观察 - 没设宽高或
aspect-ratio→ 模糊图加载后尺寸突变,强制重排,用户感知为“闪动”或“加载失败” - 正确替代:
opacity: 0或visibility: hidden不影响观察,但需配合 JS 控制显隐时机
最容易被忽略的一点:模糊图和高清图的宽高比必须一致。否则高清图替换后拉伸/裁剪,视觉上像加载失败——这不是代码问题,是设计资产没对齐。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!










