Chrome中的SVG <use>元素未显示</use>

时间:2012-07-16 23:52:03

标签: google-chrome svg

Chrome似乎没有在内联svg中显示<use>个元素。以下是一个示例(下面的代码或在http://www.bobwyttenbach.com/chromeuse.html处查看):

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Chrome use-tag bug?</title>
</head>
<body>
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" width="200px" height="200px" viewBox="0 0 200 200">
    <defs>
        <g id="test1">
            <circle cx="100" cy="100" r="50" fill="red"/>
        </g>
    </defs>
    <g>
        <rect x="0.5" y="0.5" width="199" height="199" stroke="black" fill="none"/>
        <use xlink:href="#test1" x="0" y="0"/>
    </g>
</svg>
<p>Above is inline svg with a use tag; below is the same svg linked through an object tag. Below is correct.</p>
<object data="chromeuse.svg" width="200" height="200"></object>
</body>
</html>

红色圆圈不会出现在内联svg中,但会在通过对象标记链接相同的svg时出现。 Safari,Firefox,Opera和Internet Explorer 9都正确显示内联svg。

我做错了吗?这是一个已知的Chrome错误(我还没有找到它)?任何解决方法?

3 个答案:

答案 0 :(得分:1)

不知道这个问题是否仍然有用,但是我最近遇到过这种情况,并且我很确定其他人也会遇到这种情况(尤其是那些初次尝试使用SVG精灵的人)

在我的情况下,我将一个精灵中的16个SVG图标手动加入了sprite.svg,并且在此文件中,我省略了重要的元信息:

<?xml version="1.0" encoding="utf-8"?>
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> 

我根本没有第一行,而我在第二行上只有一个没有元属性(<svg>xmlns)的xmlns:xlink开头标签。一旦我带回了所有这些省略的元信息,我从sprite.svg开始的图形就开始正确显示。

希望它对某人有帮助。

答案 1 :(得分:0)

好的,所以我删除了我的上一篇文章,因为我错误地想弄清楚为什么use元素对我有用而不适合你。我可以说的是我正在使用这个来源的修改版本https://code.google.com/p/svg-edit/,所以简而言之,我的答案是走过去看看他们是如何做到的。我相信当你从他们的图书馆插入图像时就会证明这一点。

答案 2 :(得分:0)

我花了很长时间调试内联svg使用元素没有显示出来。 BobW讨论的chrome bug目前似乎已修复。要完全消除由其他内容引起的同一问题,请尝试在HTML中注释掉<base href="somethingsomethingsomething" />标记。

当然,这可能会破坏您网站上的每个相关链接,但现在会显示<use>个元素。向前迈出一步,退后一步:)

此处的相关信息: Using base tag on a page that contains SVG marker elements fails to render marker