外部引用SVG Sprite无法显示的技术问题咨询
SVG Sprite 外部引用无法显示的排查与解决
问题场景
将SVG Sprite作为内联代码时图标可正常显示,但提取到根目录的sprites.svg文件后,通过以下代码引用无法显示图标:
<svg class="icon"> <use href="sprites.svg#book-icon"></use> </svg>
内联可正常运行的代码如下:
内联SVG Sprite代码
<svg width="0" height="0" class="hidden"> <symbol xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1024 1024" id="book-icon"> <path d="M919.6 285.3h-45.7v28.6h45.7c7.7 0 10.6 8.4 10.6 16.1v378.2c0 38.6-28 67.5-66.7 67.5H583.4c-23.2 0-45.3 21.4-45.3 44.6v4.6h-56.4v-4.6c0-23.2-15.2-44.6-38.4-44.6H163.2c-38.7 0-73.6-28.9-73.6-67.5V330c0-7.7 9.8-16 17.5-16H146v-28.7h-38.8A47.3 47.3 0 0 0 62 330v378.2c0 54 47 95.2 101.2 95.2h280.1c7.7 0 10.8 9.2 10.8 16.9v7c0 15.4 15.8 25.2 31.2 25.2h56c15.5 0 24.4-9.8 24.4-25.2v-7c0-7.7 10-17 17.7-17h280.1c54.1 0 94.4-41 94.4-95V330c0-23.2-15.1-44.7-38.3-44.7zm-647.7 0h167.9v28.6h-168zm0 63.5h167.9v27.6h-168zm0 62.4h167.9V440h-168zm308.1-126h168V314H580zm0 63.6h168v27.6H580zm0 62.4h168V440H580z" fill="#ff7415"></path> <path fill="#262626" d="M842.5 230h-17.7v-5c0-31-21.4-58.5-52.3-58.5h-168a105 105 0 0 0-91.1 52.9 105 105 0 0 0-91-52.9H254.1A61 61 0 0 0 195 225v5h-11c-27 0-52.5 27.1-52.5 58v378.2c0 38.6 33.4 67.5 70 67.5h255.7c23.2 0 42 20.5 42 42h28c0-21.5 19-42 42-42H825c36.7 0 63.2-28.9 63.2-67.5V288c0-30.9-18.6-58-45.7-58zm-238-35.9h168c15.4 0 24.6 15.4 24.6 30.9v399.2c0 15.4-9.2 25.6-24.6 25.6h-168c-30.5 0-59.3 15.5-80.8 36.3V274c0-42.5 38.2-79.9 80.7-79.9zM222.6 225c0-15.5 16-30.9 31.5-30.9h168.1c42.5 0 73.8 37.4 73.8 79.9v411.9c-14.4-20.7-43.4-36.1-73.8-36.1h-168c-15.5 0-31.6-10.2-31.6-25.6V225zm-21 481c-21.3 0-42.5-16.6-42.5-39.8V288c0-15.2 13.6-30.4 25-30.4H195v366.6c0 30.9 28.2 53.2 59.1 53.2h168.1c26.7 0 50.3 14 64.1 34.8-8.8-4.1-18.7-6.1-29-6.1H201.6zm657.9-39.8c0 23.2-13.3 39.9-34.6 39.9H569.4c-10.4 0-20.2 2-29.1 6a77.3 77.3 0 0 1 64.1-34.7h168.1c30.9 0 52.2-22.3 52.2-53.2V257.6h17.8c11.4 0 17 15.2 17 30.4v378.2z"></path> <path fill="#e0e0e0" d="M439.8 544.6a14 14 0 0 1-14 14h-140a14 14 0 0 1-14-14v-55.9a14 14 0 0 1 14-14h140a14 14 0 0 1 14 14v56zm308.2 0a14 14 0 0 1-14 14H594a14 14 0 0 1-14-14v-55.9a14 14 0 0 1 14-14h140a14 14 0 0 1 14 14v56z"></path> </symbol> </svg>
内联引用代码
<svg class="icon"> <use href="#book-icon"></use> </svg>
排查与解决方法
校验文件路径
确认sprites.svg确实在项目根目录,若在子页面引用,建议使用绝对路径(如/sprites.svg#book-icon),避免相对路径解析错误。修正外部SVG文件结构
外部sprites.svg无需保留外层隐藏的<svg>标签,只需保留根<svg>(带命名空间)和内部<symbol>。正确结构如下:<svg xmlns="http://www.w3.org/2000/svg"> <symbol viewBox="0 0 1024 1024" id="book-icon"> <!-- 原symbol内的path内容 --> </symbol> </svg>必须保留根
<svg>的xmlns属性,这是SVG文件的核心命名空间声明。处理跨域限制
若页面与sprites.svg不同域(如本地用file://协议打开、跨域名部署),浏览器会阻止引用。解决方式:- 确保资源同域部署;
- 给SVG文件配置CORS响应头;
- 本地开发用HTTP服务器(如live-server)代替直接打开HTML文件。
清除浏览器缓存
浏览器可能缓存了旧的错误文件,按Ctrl+Shift+R强制刷新页面,重新加载资源。兼容旧浏览器属性
部分旧浏览器不支持href,需同时添加xlink:href属性(需引入xlink命名空间):<svg class="icon" xmlns:xlink="http://www.w3.org/1999/xlink"> <use href="sprites.svg#book-icon" xlink:href="sprites.svg#book-icon"></use> </svg>检查文件编码
确保sprites.svg保存为UTF-8编码,避免特殊字符导致解析失败。
内容的提问来源于stack exchange,提问作者Amin
相关产品推荐
相关产品推荐

