【问题标题】:CSS: SVGs in data URL not working in IE11CSS:数据 URL 中的 SVG 在 IE11 中不起作用
【发布时间】:2020-01-18 13:54:41
【问题描述】:

我正在做这样的事情(在 React 应用程序中,使用样式化组件):

a {
    position: relative;
  }

  a::after {
    content: '';
    position: absolute;
    bottom: -10px;
    display: block;
    height: 8px;
    width: 100%;
    transform: rotate(180deg);
    background: 0 center repeat-x
      url('data:image/svg+xml;utf-8,<?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" x="0px" y="0px" width="100%" height="8px" viewBox="0 0 9 6" enable-background="new 0 0 9 6" xml:space="preserve">
        <polygon stroke="${encodeURIComponent(
          c_NAV_ACTIVE
        )}" points="4.5,4.5 0,0 0,1.208 4.5,5.708 9,1.208 9,0 "/>
    </svg>');
  }

它适用于大多数浏览器,但不适用于 IE 11。这是我试图实现的效果(当前活动页面的下划线):

我已经查看过类似的帖子,例如this one herethis article。我已经修改了我的 background 属性,使 HTML 编码如下:

background: 0 center repeat-x
      url("data:image/svg+xml;charset=UTF-8,%3C?xml version='1.0' encoding='UTF-8'?%3E
    %3Csvg xmlns='http://www.w3.org/2000/svg' x='0px' y='0px' width='100%' height='8px' viewBox='0 0 9 6' enable-background='new 0 0 9 6' xml:space='preserve'%3E
        %3Cpolygon stroke='${encodeURIComponent(
          c_NAV_ACTIVE
)}' points='4.5,4.5 0,0 0,1.208 4.5,5.708 9,1.208 9,0 '/%3E
    %3C/svg%3E");

它仍然无法在 IE 11 中运行。有什么想法吗?如果我将background 的值替换为原始颜色,例如red,则有下划线。显然,IE 对我如何在数据 URL 中使用 SVG 很挑剔。提前致谢!

【问题讨论】:

  • 你能试试看你的 a::after CSS 类是否应用在 IE 中吗?如果未应用,请尝试将其添加到容器元素中。对于 IE,我建议你使用简单的 css 下划线来避免 svg 相关的问题。
  • @Deepak-MSFT 感谢您的反馈!是的,课程适用。我可以在 IE11 开发者工具中看到它。此外,如果我用颜色更改 URL 属性,它就可以工作。例如background: pink 工作得很好,即显示下划线。这显然是 svg 作为数据 URI 的一部分的问题。为了保持一致性,我需要让它对于我们支持的所有浏览器看起来都一样,所以很遗憾,在这种情况下使用简单的 CSS 不是一个选项。
  • 我尝试通过删除背景值中的一个部分来测试问题,以检查导致此问题的确切部分,但它仍然没有工作,并且没有给出有关问题原因的任何提示.我会尝试做进一步的测试,看看是否有针对 IE 的解决方案或变通方法。
  • 是的,这就是我所做的,我只是让它工作。它是正确编码的组合,用单引号交换属性值的双引号,用双引号包裹 URL,不使用 background 属性作为简写(所以我不得不将其分解)并添加 background-size有 2 个值。我会回答我的问题并在下面发布答案。

标签: css svg internet-explorer-11


【解决方案1】:

这对我有用:

background-position-x: 0;
background-position-y: center;
background-repeat: repeat-x;
background-image: url("data:image/svg+xml;charset=UTF-8,%3csvg version='1.1' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' x='0px' y='0px' width='100%25' height='8px' viewBox='0 0 9 6' enable-background='new 0 0 9 6' xml:space='preserve'%3e%3cpolygon stroke='%23fb37f1' points='4.5,4.5 0,0 0,1.208 4.5,5.708 9,1.208 9,0 '/%3e%3c/svg%3e");
background-size: 12px 12px;

我用过这个编码器https://codepen.io/elliz/pen/ygvgay

【讨论】:

  • 感谢您发布此问题的解决方案。我建议您在 48 小时后尝试将您自己的答案标记为该问题的可接受答案,此时该答案可以标记。它可以在未来帮助其他社区成员解决类似的问题。感谢您的理解。
猜你喜欢
  • 2014-05-27
  • 2018-04-10
  • 2017-10-23
  • 2018-08-17
  • 2015-02-16
  • 2015-10-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多