【问题标题】:Using svg in IE11在 IE11 中使用 svg
【发布时间】:2016-05-18 16:28:40
【问题描述】:

我发现这个 svg 在 Chrome、Firefox 和 IE11 中可以正确呈现:

background:#000 url('data:image/svg+xml;utf8,<svg width="42px" height="42px" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"><g><circle cx="21px" cy="21px" r="21" fill="black"/><rect x="9px" y="10px" width="25px" height="22px" fill="white"/></g></svg>');

但是,我无法让这些 svg 图标跨浏览器工作:

这适用于 Chrome 和 Firefox,但不适用于 IE11:

background:#000 url('data:image/svg+xml;utf8,<svg width="42px" height="42px" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1"><g><circle cx="21px" cy="21px" r="21px" fill="black"/><g><polyline points="20 30 15 20 25 15 20 7" stroke="white" stroke-width="2"/><circle cx="20" cy="30" r="2.2" fill="white" stroke="white"/><circle cx="20" cy="7" r="2.2" fill="white" stroke="white"/></g></g></svg>');
}

我发现这个 svg 仅适用于 Chrome:

background:#000 url('data:image/svg+xml;utf8,<svg width="42" height="42" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"><g><circle r="21" id="svg_2" cy="21" cx="21" fill="#050404"/><path id="svg_3" d="m52.86,21.00981l6.42885,-13.71338l17.14235,0l6.42882,13.71338l-6.42882,13.71425l-17.14235,0l-6.42885,-13.71425z" fill="#ffffff"/></g></svg>');
}

有没有办法让这些 svg 跨浏览器工作。我使用这些基于this的svgs

我尝试了以下组合:

background:black url('data:image/svg+xml;utf8,<svg width="42px" height="42px" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"><g><circle cx="21px" cy="21px" r="21" fill="black"/><rect x="9px" y="10px" width="25px" height="22px" fill="white"/></g></svg>'),linear-gradient(transparent, transparent);

background:%23000 url('data:image/svg+xml;utf8,<svg width="42px" height="42px" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"><g><circle cx="21px" cy="21px" r="21" fill="black"/><rect x="9px" y="10px" width="25px" height="22px" fill="white"/></g></svg>'),linear-gradient(transparent, transparent);

我也尝试使用这里建议的后备,但它总是呈现 png:

body {
  background: url(fallback.png);
  background: url(background.svg),
    linear-gradient(transparent, transparent);
}

【问题讨论】:

  • 你试过检查控制台吗?
  • @Justinas 我做了,是否有任何关于 CSS 的消息?我没有找到。
  • 我看到了一些不同的行为。第一个似乎在我的 IE11 (Win7) 上不起作用,第三个在 Chrome 中对我来说也只是显示黑色(我只是将 CSS 应用于小提琴的主体)。

标签: css firefox svg internet-explorer-11


【解决方案1】:

您不能只写出任何旧字符集并将它们作为 url。有些字符有特殊含义。

字符# 应该被保留为片段标识符的开始。虽然 Chrome 没有正确实现这一点,但 Firefox 和 IE 做到了,这就是最后一个示例不起作用的原因。

如果您将最终 url 中的所有 # 字符替换为 %23,它将在 Firefox 和 IE 中工作。例如

body {
  background:#000 url('data:image/svg+xml;utf8,<svg width="42" height="42" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"><g><circle r="21" id="svg_2" cy="21" cx="21" fill="%23050404"/><path id="svg_3" d="m5.86,21.00981l6.42885,-13.71338l17.14235,0l6.42882,13.71338l-6.42882,13.71425l-17.14235,0l-6.42885,-13.71425z" fill="%23ffffff"/></g></svg>');
}

我不确定中间 URL,对我来说似乎没问题。 base64 编码可以让它在 IE 中工作。

【讨论】:

  • 一个例子会很有帮助,我尝试使用 %23 而不是 # 但我得到了同样的错误。
  • 我添加了一个适用于 Firefox 的示例。它只是按照我的建议更改了 # 个字符。
  • 虽然不适用于 IE11,但我使用 this 作为 background,将 . 替换为 %2E
  • 你必须尝试删除一些东西,直到你找出问题所在。一次更改一个元素/属性的非工作版本,直到你弄明白为止。
猜你喜欢
  • 1970-01-01
  • 2017-10-16
  • 2017-11-04
  • 2017-09-21
  • 2018-02-13
  • 1970-01-01
  • 1970-01-01
  • 2020-02-19
  • 2016-12-18
相关资源
最近更新 更多