Chrome 没有渲染通过 < img > 元素引用的 SVG

我有问题与谷歌铬不渲染与 img元素 svg。刷新页面和初始页面加载时会发生这种情况。我可以通过“检查元素”来显示图像,然后右键单击 svg 文件并在一个新的选项卡中打开 svg 文件。然后将在原始页面上呈现 svg 图像。

<img src="../images/Aged-Brass.svg">

完全不知道问题出在哪里。Svg 图像在 IE9和 FF 中显示良好,但在 Chrome 或 Safari 中不能。

我也设置了 MIME 类型

编辑: 下面是一个简单的 html 页面,我构建这个页面是为了帮助说明我的问题。

<!DOCTYPE html>
<html>
<head>
<title>SVG Test</title>


<style>
#BackgroundImage{
background: url('../images/Aged-Brass.svg') no-repeat scroll left top;
width: 400px;
height: 600px;
}


#image_element {
width: 400px;
height: 600px;
margin: 0px;
padding: 0px;
}
</style>
</head>
<body>
<div id="image_element">
<img src="../images/Aged-Brass.svg">
</div>
<div id="BackgroundImage"></div>
</body>
</html>

正如您所看到的,我试图在 img元素和 css 中使用一个 svg 文件作为背景图像。在 chrome 或 Safari 中都不能加载初始页面。当我检查元素时,右键单击 svg 或单击另一个窗口中的 svg 加载链接,svg 文件将在原始选项卡中呈现。

243329 次浏览

我可以用你的样本创建一个测试页面,它工作得很好。我的假设是你的 svg 文件有问题。你能把这个也粘贴到这里吗?这是我用的样品。

 <svg width="100" height="100" xmlns="http://www.w3.org/2000/svg">
<!-- Created with SVG-edit - http://svg-edit.googlecode.com/ -->
<g>
<title>Layer 1</title>
<ellipse ry="30" rx="30" id="svg_1" cy="50" cx="50" stroke-width="5" stroke="#000000" fill="#FF0000"/>
</g>
</svg>

我来这里是因为我也有同样的问题, 当我检查元素时,我可以看到文件,但是在站点上我不能(即使使用 localhost)

我的问题的答案是保存 SVG 文件。 如果你保存它从插画确保点击’他们的床’,而不是’链接’。作为链接将只引用您的本地文件,而不是包括数据(如果我理解正确)。 enter image description here

我在 Adobe 网站上看到了一些其他有用的出口技巧 Http://www.adobe.com/inspire/2013/09/exporting-svg-illustrator.html

这招对我管用,希望有用。

我来这里是因为我有一个类似的问题,图像没有被渲染。我发现测试服务器的内容类型头部不正确。我通过将以下内容添加到。Htaccess 文件:

AddType image/svg+xml svg svgz
AddEncoding gzip svgz

使用 <object>代替(当然,用您自己的 URL 替换每个 URL) :

.BackgroundImage {
background: url('https://upload.wikimedia.org/wikipedia/commons/b/bd/Test.svg') no-repeat scroll left top;
width: 400px;
height: 600px;
}
<!DOCTYPE html>
<html>
<head>
<title>SVG Test</title>
</head>
<body>
<div id="ObjectTag">
<object type="image/svg+xml" data="https://upload.wikimedia.org/wikipedia/commons/b/bd/Test.svg" width="400" height="600">
Your browser does not support SVG.
</object>
</div>
<div class="BackgroundImage"></div>
</body>
</html>

也有同样的问题。如果服务器配置正确,并且。Htacces 不是答案,可能想看看你嵌入的 svg 源代码。我的是用文本编辑器创建的,在 Chrome 和 Safari 中的 html5代码渲染得很好,一旦嵌入,什么都看不见。 增加了正确的版本,尺寸等 svg 代码和工作喜欢一个魅力。 而且,所有样式都是内联的。

<svg version="1.1" baseProfile="full" width="24" height="24" xmlns="http://www.w3.org/2000/svg">
<rect x="0" y="0" rx="2" ry="2" width="24" height="24" style="fill:#fbc800;width:24px;height:24px;"  />
</svg>

Svg-tag 需要名称空间属性 xmlns:

<svg xmlns="http://www.w3.org/2000/svg"></svg>

看起来像是 Chrome 的 bug, 我做了些别的事,因为我几乎要疯了,因为这个..。 如果更改显示在屏幕上的 svg 对象的 css,则使用 Chrom 调试器。

所以我就这么做了: 1. 检查屏幕尺寸 2. 侦听 SVG 对象的“ load”事件 3. 当元素被加载时,我使用 jQuery 改变它的 css 4. 它对我起了作用

if (jQuery(window).width() < 769) {


jQuery('object#mysvg-logo')[0].addEventListener('load', function() {
jQuery("object#mysvg-logo").css('width','181px');
}, true);


}
width: 180px;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<object id="mysvg-logo" type="image/svg+xml" data="my svg logo url here">Your browser does not support SVG</object>

我也得到了同样的问题与铬,后加入 DOCTYPE它的工作原理预期

<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">

之前

    <?xml version="1.0" encoding="iso-8859-1"?>
<svg version="1.1" id="Capa_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
width="792px" height="792px" viewBox="0 0 792 792" style="enable-background:new 0 0 792 792;" xml:space="preserve">
<g fill="none" stroke="black" stroke-width="15">
......
......
.......
</g>
</svg>

之后

    <?xml version="1.0" encoding="iso-8859-1"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg version="1.1" id="Capa_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
width="792px" height="792px" viewBox="0 0 792 792" style="enable-background:new 0 0 792 792;" xml:space="preserve">
<g fill="none" stroke="black" stroke-width="15">
......
......
.......
</g>
</svg>

将 width 属性添加到[ svg ]标记(通过编辑 svg 源 XML)对我来说很有用: 例如:

<!-- This didn't render -->
<svg version="1.1" baseProfile="full" xmlns="http://www.w3.org/2000/svg">
...
</svg>


<!-- This did -->
<svg version="1.1" baseProfile="full" width="1000" xmlns="http://www.w3.org/2000/svg">
...
</svg>

我也遇到过类似的问题,现有的答案要么不适用,要么有效,但是因为其他原因我们不能使用它们。所以我必须弄清楚 Chrome 不喜欢 SVG 的哪些地方。

在我们的例子中,原来 SVG 文件中 symbol标签的 id属性中有一个 :,这是 Chrome 不喜欢的。只要我移除 :,它就能正常工作。

坏:

<svg
xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 72 72">
<defs>
<symbol id="ThisIDHasAColon:AndChromeDoesNotLikeIt">
...
</symbol>
</defs>
<use
....
xlink:href="#ThisIDHasAColon:AndChromeDoesNotLikeIt"
/>
</svg>

好:

<svg
xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 72 72">
<defs>
<symbol id="NoMoreColon">
...
</symbol>
</defs>
<use
....
xlink:href="#NoMoreColon"
/>
</svg>

.svg图像没有它的初始高度和宽度。因此它是不可见的。你必须设置它。

您可以在行内或在 css 文件:

排队:

<img src="../images/Aged-Brass.svg" class="image" alt="logo" style="width: 100px; height: 50px;">

社会服务科档案:

<img src="../images/Aged-Brass.svg" class="image" alt="logo">
.image {
width: 100px;
height: 50px;
}

我最初从 Photoshop CC 导出了 svg,必须手动添加

version="1.1"放入 <svg>标记中

让它在铬合金上显示。

在我的例子中,当我使用 Photoshop 创建并保存 svg 时,这个问题依然存在。 使用 Illustrator 打开文件并随后导出 svg 对此很有帮助。

简单易行的方法; 根据 Https://css-tricks.com/forums/topic/svg-css-background-image-not-showing-in-chrome/ 您必须使用文本编辑器(如记事本)打开.SVG 文件并进行更改

xlink:href="data:img/png;base64,

致:

xlink:href="data:image/png;base64,

这招对我很管用!

我确保我添加了 形象的风格。它为我工作

style= "width:320; height:240"

小心,您没有为您的 svg 图像的 过渡期 css 属性

我现在不知道为什么,但是如果你在 Chrome 上为 svg 图片做了“过渡: 所有轻松0.3 s”,图片就不会出现

例如:

* {
transition: all ease 0.3s
}


Chrome 不呈现 svg。

删除任何转换 css 属性,然后重试

关于问题,尝试先用一个能够读取 svg-images 的程序打开图像。
如果失败,那么 svg-image 就会以某种方式损坏。

我有了这个案例,并将 svg-path 复制到一个新的 svg-image 中,并调整了 svg-tag 的所有细节。

我从来没有测试过它没有渲染的原因,但是假设一些看不见的特殊标志导致了渲染错误。有时在 Mac 上编辑文件,我已经在其他环境中遇到过这个问题。

我在使用通过 IMG 标记包含的 SVG 图像时遇到了同样的问题。事实证明,Chrome 不喜欢在文件顶部直接出现一个空行。

我删除了空行,SVG 立即开始渲染。

来自服务器的 HTTP 头中的内容类型对我来说是个问题,我有一个 node.js 服务器,添加了:

if( pageName.substring(pageName.lastIndexOf('.')) == '.svg' ) {
res.writeHead(200, { "Content-Type": "image/svg+xml" });
}

PageName 是所请求内容的本地变量。

我猜这是一个常见的问题! 我正在使用当前版本的 Chrome (2020年3月)。

Just replace <img> tag to <object> tag for SVG image.


<object data="assets/twitter-wrap.svg" type="image/svg+xml"></object>

对于我设置宽度/高度的 img 工作。 <asp:Image runat="server" ID="Icon" Style="max-width: 50px; max-height: 50px; position: relative;" />

Lighttpd

我的问题是在 lighttpd 配置文件中缺少 svg文件的 mime 处理程序。把这些加入到你的 lighttpd.conf中可以解决你的问题:

mimetype.assign             = (
".pdf"          =>      "application/pdf",
".sig"          =>      "application/pgp-signature",
".spl"          =>      "application/futuresplash",
".class"        =>      "application/octet-stream",
".ps"           =>      "application/postscript",
".torrent"      =>      "application/x-bittorrent",
".dvi"          =>      "application/x-dvi",
".gz"           =>      "application/x-gzip",
".pac"          =>      "application/x-ns-proxy-autoconfig",
".swf"          =>      "application/x-shockwave-flash",
".tar.gz"       =>      "application/x-tgz",
".tgz"          =>      "application/x-tgz",
".tar"          =>      "application/x-tar",
".zip"          =>      "application/zip",
".mp3"          =>      "audio/mpeg",
".m3u"          =>      "audio/x-mpegurl",
".wma"          =>      "audio/x-ms-wma",
".wax"          =>      "audio/x-ms-wax",
".ogg"          =>      "application/ogg",
".wav"          =>      "audio/x-wav",
".gif"          =>      "image/gif",
".jpg"          =>      "image/jpeg",
".jpeg"         =>      "image/jpeg",
".png"          =>      "image/png",
".svg"          =>      "image/svg+xml",
".xbm"          =>      "image/x-xbitmap",
".xpm"          =>      "image/x-xpixmap",
".xwd"          =>      "image/x-xwindowdump",
".css"          =>      "text/css",
".html"         =>      "text/html",
".htm"          =>      "text/html",
".js"           =>      "text/javascript",
".asc"          =>      "text/plain",
".c"            =>      "text/plain",
".cpp"          =>      "text/plain",
".log"          =>      "text/plain",
".conf"         =>      "text/plain",
".text"         =>      "text/plain",
".txt"          =>      "text/plain",
".spec"         =>      "text/plain",
".dtd"          =>      "text/xml",
".xml"          =>      "text/xml",
".mpeg"         =>      "video/mpeg",
".mpg"          =>      "video/mpeg",
".mov"          =>      "video/quicktime",
".qt"           =>      "video/quicktime",
".avi"          =>      "video/x-msvideo",
".asf"          =>      "video/x-ms-asf",
".asx"          =>      "video/x-ms-asf",
".wmv"          =>      "video/x-ms-wmv",
".bz2"          =>      "application/x-bzip",
".tbz"          =>      "application/x-bzip-compressed-tar",
".tar.bz2"      =>      "application/x-bzip-compressed-tar",
".odt"          =>      "application/vnd.oasis.opendocument.text",
".ods"          =>      "application/vnd.oasis.opendocument.spreadsheet",
".odp"          =>      "application/vnd.oasis.opendocument.presentation",
".odg"          =>      "application/vnd.oasis.opendocument.graphics",
".odc"          =>      "application/vnd.oasis.opendocument.chart",
".odf"          =>      "application/vnd.oasis.opendocument.formula",
".odi"          =>      "application/vnd.oasis.opendocument.image",
".odm"          =>      "application/vnd.oasis.opendocument.text-master",
".ott"          =>      "application/vnd.oasis.opendocument.text-template",
".ots"          =>      "application/vnd.oasis.opendocument.spreadsheet-template",
".otp"          =>      "application/vnd.oasis.opendocument.presentation-template",
".otg"          =>      "application/vnd.oasis.opendocument.graphics-template",
".otc"          =>      "application/vnd.oasis.opendocument.chart-template",
".otf"          =>      "application/vnd.oasis.opendocument.formula-template",
".oti"          =>      "application/vnd.oasis.opendocument.image-template",
".oth"          =>      "application/vnd.oasis.opendocument.text-web",


# make the default mime type application/octet-stream.
""              =>      "application/octet-stream",
)

参考文献

Lightttpd 中 AddType 的替代

我也有同样的问题。当我检查接受的文件类型并在标题“ Content-Type”、“ image/svg + xml”中设置时,这个问题得到了解决:

response.setHeader("Content-Type", "image/svg+xml");

在我的示例中,由于图像标记的 id 中包含 _(下划线) ,因此没有加载 svg,所以我从

<image id="image0_1166:0000"> to <image id="image0"> and it worked. And don't forget to remove the same here
<use xlink:href="#image0">

我有这个问题时,我输出的图像从 figma。检查源代码的 svg,如果你有冒号 :在 id 像这样: id="paint1_linear_23:318"它会让你的问题与渲染的铬。

删除 id 中的所有冒号。

不要忘记像下面这样引用 id: fill="url(#paint1_linear_23:318)"

我尝试了上面的大部分解决方案,但都不管用。 我用了一种有效的 svg 杀菌剂 https://svg.enshrined.co.uk/

我有一个类似的问题,我认为试图设置 SVG 和文件没有正确加载(而 Png 做)的 Sharepoint 图标。

见线索: File-format-can-an-svg-file-be-used-as-a-site-icon-in-share point-online

问题的原因是标记中没有设置高度和宽度标志。

例如,设置这个可以工作

我通过以下方式解决了这个问题:

  1. 在文本编辑器中打开 SVG (例如记事本)
  2. 包含在第一个 SVG 头代码 Width = “80”Height = “80”(也许可以优化大小)
  3. 保存文件和上传。它的工作!

我的 SVG 的第一个标签是这样的

<svg height="80" width="80" id="Layer_1" data-name="Layer 1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 114.60458 114.60458">