SVG线性渐变在Safari中不起作用

Chr*_*rga 11 safari html5 svg linear-gradients

我有一个SVG对象,其中包含直接嵌入文档中的线性渐变.它在Chrome和Firefox中运行良好,但在Safari中无法呈现.如果我将SVG创建为文件并使用Object标签嵌入它,它在Safari中可以正常工作.其他形状和填充工作,它只是线性渐变不起作用.我想我可以使用该对象,但我更喜欢直接嵌入SVG.

我在这里创建了一个演示(在Chrome中运行,而不是Safari):http://jsfiddle.net/sjKbN/

我发现这个答案建议将内容类型设置为application/xhtml+xml,但这本身似乎会导致其他问题.

只是想知道是否有人遇到任何其他修复或想法让这个工作.

met*_*ion 27

如果你defs在它周围包裹一个标签,你的渐变将在Safari中起作用:

<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
     width="300px" height="300px" viewBox="0 0 300 300" enable-background="new 0 0 300 300" xml:space="preserve">
 <defs>
<linearGradient id="SVGID_1_" gradientUnits="userSpaceOnUse" x1="5.6665" y1="149.5" x2="293.333" y2="149.5">
    <stop  offset="0" style="stop-color:#FFF33B"/>
    <stop  offset="0.0595" style="stop-color:#FFE029"/>
    <stop  offset="0.1303" style="stop-color:#FFD218"/>
    <stop  offset="0.2032" style="stop-color:#FEC90F"/>
    <stop  offset="0.2809" style="stop-color:#FDC70C"/>
    <stop  offset="0.6685" style="stop-color:#F3903F"/>
    <stop  offset="0.8876" style="stop-color:#ED683C"/>
    <stop  offset="1" style="stop-color:#E93E3A"/>
</linearGradient>
</defs>
<rect x="5.667" y="5.333" fill="url(#SVGID_1_)" width="287.667" height="288.333"/>
</svg>
Run Code Online (Sandbox Code Playgroud)

似乎defs鼓励包含您的参考文献,但根据规范,这不是强制性的.所以这是Safari中的一个错误.

  • 在你的帮助之后,我能做到最少!http://stackoverflow.com/a/10808645/524555 (3认同)

Seb*_*ien 23

关于Alpha:似乎Safari(此时为7)不包括SVG颜色alpha通道,使用stop opacity属性.它工作正常!

<stop stop-color="rgba(x,y,z,0.5)"> //safari does not work
<stop stop-color="rgb(x,y,z)" stop-opacity="0.5"> //ok
Run Code Online (Sandbox Code Playgroud)

  • 龙森爵士错了!首先在safari中搜索线性渐变的缺陷与其他浏览器相同,我先看了这篇文章.其次,该主题与线性梯度的safari不同行为有关.Alpha通道是这个全球主题的一部分:"SVG线性渐变在Safari中不起作用" (8认同)
  • @Sebastien,很棒的回答.在这里拥有它绝对相关!谢谢 (2认同)

mic*_*ssi 7

公认的答案不是我的解决方案。

我的问题是<base href="/" />索引文件中存在标签。只需将其删除即可为我解决问题。

如果您无法删除它,则可能已经存在一些解决方法:找到了要点,但我没有对其进行测试。

更新资料

仅仅删除href破坏了我的角度应用程序的子路由,正确的解决方法是在页面顶部放置带有页面相对位置的linearGradient id。我将逻辑包装在这样的方法中:

get svgFill(): string {
  return `url(${this.location.path()}#${this.gradientId}) white`;
}
Run Code Online (Sandbox Code Playgroud)