【问题标题】:Include SVG file in SVG在 SVG 中包含 SVG 文件
【发布时间】:2010-10-13 17:07:08
【问题描述】:

我的 SVG 文件的 defs 部分中有一个 linearGradient,并使用 fill="url(#myGradientName)" 引用它。到目前为止效果很好。

我想我应该能够将我的整个 defs 部分放在它自己的 SVG 文件中,然后从我所有的 SVG 图像中引用它。也就是说,类似于:

styles.svg:

<svg xmlns=...>
  <defs>
    <linearGradient id="myGradient" ...>
    </linearGradient>
  </defs>
</svg>

图像.svg:

<svg xmlns=...>
  <rect width="100" height="100" fill="styles.svg#myGradient"/>
</svg>

但我似乎无法应用该样式。我对这个文件 (styles.svg#myGradient) 外部的 ID 有错误的语法吗?我是否需要先以某种方式明确包含该文件?

我一直在研究 SVG 规范,看起来这应该是可能的,但没有一个示例实际上表明它已经完成。

编辑:FOP FAQ 表明正确的语法是 fill="url(grad.svg#PurpleToWhite)",但这在 Gecko 或 Webkit 中不起作用。这是正确的,没有人支持,还是我做错了什么?

【问题讨论】:

标签: include svg


【解决方案1】:

好像只有Firefox 3.1支持这个。

【讨论】:

  • 关于 Opera 或 Webkit/Safari/Chrome 的任何信息?
  • 问题提到它在Webkit中不起作用。我没有在 Opera 中尝试过,但 Gecko 似乎在其他领域拥有最强大的 SVG 支持,所以如果 Opera(而没有其他人)支持它,我会感到惊讶。
  • This Webkit Bug shows 即使在当前版本的 Chrome/Safari 中,这种不正确的行为仍然没有得到解决。对长期存在的修复报告有很多抱怨,但问题未解决,最后一个维护者由于利益冲突退出了该项目。太好了...
【解决方案2】:

其实,FOP FAQ 是对的,正确的语法是用url(...) 包含URI。刚刚检查了我的 Firefox,它处理 only 周围的 url()。如果处理方式不同,这将是 Safari 或 Opera 中的错误。

我碰巧提交了similar question,但同样收效甚微。

干杯,

【讨论】:

    【解决方案3】:

    您确实需要说fill="url(styles.svg#myGradient)"。这适用于 Firefox 4 beta 6,我想它适用于 Firefox 3.5。但是 Chrome (7.0.517.41 beta) 和 IE9 beta (9.0.7930.16406) 仍然不支持这个。看起来他们都在当前文档中查找#myGradient,而不是实际转到指定的 URL。毛。

    以下是我用来测试的完整文件:

    styles.svg

    <svg xmlns="http://www.w3.org/2000/svg">
      <defs>
        <linearGradient id="myGradient">
          <stop offset="0" stop-color="red" />
          <stop offset="1" stop-color="black" />
        </linearGradient>
      </defs>
    </svg>
    

    图像.svg

    <svg xmlns="http://www.w3.org/2000/svg">
      <rect width="100" height="100" fill="url(styles.svg#myGradient)"/>
    </svg>
    

    【讨论】:

    • 您可以这样做,但这意味着您的渐变将被指定为内联到 SVG 文档。如果您想在多次重复同一个 SVG 图标时使用不同的渐变怎么办?
    • @MichaelGiovanniPumo 这听起来像是一个不同的问题。我不知道答案。也许fill="currentColor" 会有所帮助。如果您重复使用 &lt;img&gt;&lt;object&gt; 包含 SVG 图标,那么 it won’t inherit CSS properties from the page’s stylesheets 但也许 currentColor 仍然可以工作。
    • 2014 年更新:在 Firefox 中测试正常,但在 Chrome 中找不到渐变(呈现黑色)。可悲的是破坏了整个“包含styles.svg”的概念。另一种方法是在服务端包含那些“defs”。
    猜你喜欢
    • 1970-01-01
    • 2020-01-21
    • 2014-03-21
    • 1970-01-01
    • 2011-07-19
    • 1970-01-01
    • 2021-12-07
    • 2013-06-21
    • 2018-04-06
    相关资源
    最近更新 更多