img的src属性仅支持单url,无备用路径机制;降级需用onerror动态切换、picture/source做格式回退,或构建时预检路径。

img 的 src 属性不支持“备用路径”语法
HTML 原生 <img> 标签的 src 只能指定一个 URL,没有类似 srcset 或 sizes 那样的多源机制,更不存在 src-fallback 这类属性。所谓“降级默认路径”,不能靠改 src 实现,必须用其他手段兜底。
用 onerror 事件动态切换 fallback 图片
这是最直接、兼容性最好的运行时降级方案:当原图加载失败(404、跨域、路径错等),触发 onerror,把 src 指向本地或 CDN 上的默认占位图。
-
onerror只在资源加载失败时触发一次,成功后不会重复执行 - 必须确保 fallback 图片本身路径可靠,否则会陷入无限错误循环(例如 fallback 图也 404)
- 不要在内联
onerror里写复杂逻辑,避免污染 HTML;推荐抽成函数:onerror="handleImageError(this)" - 注意:如果图片被 CORS 阻止,
onerror会触发,但控制台可能只报 CORS 错误,无 404
示例:
@@##@@
用 + 做格式/路径级降级
<picture></picture> 本身不解决“路径失效”,但它能配合 <source></source> 的 type 和媒体查询,在不同条件下加载不同资源——其中就包括指向不同路径的图片。这适合 WebP 回退、响应式路径切换等场景。
使用 PptxGenJS 和 Python 解析,将结构化的 HTML/CSS 幻灯片内容转换为原生、可编辑的 PowerPoint(.pptx)演示文稿。
-
<source></source>的srcset必须是有效路径,否则也会触发父级<img src="/images/user-123.jpg" onerror="this.src='/images/placeholder.png'" alt="用户头像">的onerror -
<img>在<picture></picture>内是 fallback 兜底层,不是可选的“备用”——它一定会被解析,且必须有src - 若所有
<source></source>都不匹配或加载失败,最终仍依赖<img>的src,所以它的onerror依然要设
示例(WebP 回退 + 路径降级):
<picture><source type="image/webp" srcset="/images/photo.webp"><source type="image/jpeg" srcset="/images/photo.jpg"> @@##@@ </source></source></picture>
构建时注入 fallback 或预检路径(Vite/Webpack 场景)
开发阶段就能发现路径问题,比运行时降级更早拦截。但要注意:构建工具不会自动校验 src 字符串是否真实存在,需额外配置。
- Vite 中可用插件如
vite-plugin-html或自定义插件,在 HTML 构建时扫描<img>,检查对应文件是否存在,不存在则自动替换为 fallback 路径 - Webpack 的
html-webpack-plugin可结合loader(如file-loader)将图片路径转为哈希名并注入,天然规避 404 ——但前提是图片必须放在src或public下,且引用方式符合 loader 规则 - 静态站点生成器(如 Astro、Hugo)通常内置资源路径解析,引用不存在的图片会在构建时报错,而非留到运行时
关键点:这类方案无法覆盖动态拼接的路径(如 src="`/images/${id}.jpg`"),那些仍需 onerror 守住最后一道防线。
最容易被忽略的是:很多人以为设置了 onerror 就万事大吉,但没验证 fallback 图片自己是否真能加载。一旦 placeholder 也 404,页面就彻底空白,连提示都没有。务必把 fallback 路径压进 CI 流程或本地构建检查里。

前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!










