【发布时间】:2017-10-29 08:53:37
【问题描述】:
我一直在尝试将我的 SVG 图标外部化到一个文件中,并使用 <svg><use xlink:href="file.svg#icon" /></svg> 之类的标记来引用它们。从理论上讲,这非常有效,但是不同的浏览器在渲染方面存在问题。当在文件中引用带有<use>的符号并直接打开svg文件的url时,所有浏览器都能够正确呈现svg。
简而言之,当在标记中引用带有<svg><use/></svg> 的符号时,是否有一种跨浏览器方法可以让 SVG linearGradients 作为元素的填充?
我设置了一个 plunker 来演示这个问题: http://plnkr.co/edit/feKvZ7?p=preview
简化,标记如下:
<!DOCTYPE html>
<html>
<body>
<h1>SVG sprite test</h1>
<svg width="100" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<use xlink:href="icon.svg#icon" />
</svg>
</body>
</html>
SVG 文件如下所示:
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<defs>
<linearGradient id="gradient">
<stop offset="0" stop-color="black" />
<stop offset="1" stop-color="white" />
</linearGradient>
</defs>
<symbol id="icon" viewBox="0 0 100 100">
<circle cx="50" cy="50" r="40" stroke="black" fill="url(#gradient)" />
</symbol>
<use id="iconuse" xlink:href="#icon" width="100" height="100" />
</svg>
【问题讨论】:
-
多年以后……这些天你在做什么?
-
@NickDarvey 是个好问题。我已经放弃使用这种方法,现在正在使用 svgr 之类的东西:github.com/gregberge/svgr。不过,这可能是一个有趣的时间重新审视。快速浏览一下 Plunkr,浏览器之间在渲染不同 SVG 的方式上仍然存在差异。
标签: html svg svg-sprite