样式和脚本SVG文档引用不同的SVG文档

时间:2012-10-01 07:40:53

标签: javascript css svg

我正在玩SVG和HTML5。目前我正在检查客户端站点SVG生成的可能性。我们的想法是HTML5与<embed>元素一起提供,该元素包含描述基于十六进制的游戏地图的XML文档(以我自己的“格式”)。该文档附加了XSLT转换,指向一个XSL文件(在服务器上),该文件使SVG脱离文档。我想在不同的SVG文件(存储在服务器上)中创建不同的地图六边形,生成的SVG地图只会引用它们。

这会让你“在上下文中”。然而真正的问题从HTML5开始,所以我们走了。


如何从SVG文档中引用其他SVG文档(或其片段),以便包含的内容可用于样式和脚本编写?似乎元素<use><image>在添加不属于文档的“克隆片段”(即使是脚本......)方面也非常有限。我不确定SVG 1.2的<animation>如何,但我猜它是一样的。

我显然缺少像C #inlcude这样的原始C ++预处理器。

该标准鼓励使用<defs><symbol>来增加含义和可访问性。然而,似乎一旦你这样做(因此必须用<use>引用符号),你就不能用造型了。我没有看到如何使用相同的符号和更改的样式。

这一切使得重用和呈现/内容分离变得更加困难。

有没有办法避免这些问题?

1 个答案:

答案 0 :(得分:0)

由于缺乏支持,我继续尝试将SVG渲染器限制在少数流行的浏览器中。我也只检查了样式,因为我对JavaScript不好。

(我的测试是从本地文件完成的,在某些情况下可能很重要。)


我查看了以下浏览器:Internet Explorer,Chrome,Mozilla Firefox,Opera和Safari。我保持它们全部更新(Opera和Safari刚刚下载)所以它们是当前版本。

关于样式,我检查了以下功能:

  1. <image>
  2. <use>
  3. <animation>(来自SVG 1.2 Tiny,否则我使用1.1)。
  4. 所有三个都在主文件和CSS样式中使用CSS样式排列在引用文件中。进一步提供CSS样式的引用文件有3种风格:

    • xml-stylesheet处理说明,
    • <style>元素@import引用外部CSS文件(与处理指令相同的文件)
    • <style>元素包含正确的内容。

    使用<image>没有浏览器考虑主文档的样式(如预期的那样)。然而,如果所有浏览器都放在外部文件中(并由xml-stylesheet@import引用),则所有浏览器都没有考虑引用文档的样式。

    我不确定这里的人做得不好。通常你会在这种情况下责怪IE,但IE行为似乎在这里似乎更好,所以也许这次是其他错误的。

    Opera也有些随机。如果我一直刷新页面,它有时会显示为IE,但主要是与其他浏览器一样(在某些情况下缺乏风格)。


    使用引用文件中的<use>(引用root <svg>元素)Firefox使用两种引用的文件样式(无论是否提供它们)和主文件样式都能正常运行。

    Opera使用引用的文件样式(无论提供它们的方式),但不包括主文件样式。

    其他浏览器根本没有显示引用的文件。


    <animation>只有Opera工作。它与<use>的效果相同。其他人根本没有显示引用的文件。


    最后,我还检查了<use>引用文件中的<symbol>。并且所有浏览器都正常运行。


    这导致了一个令人遗憾的结论,即SVG文件的分离和重用几乎是不可能的(至少在Web环境中)。