我正在玩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>
引用符号),你就不能用造型了。我没有看到如何使用相同的符号和更改的样式。
这一切使得重用和呈现/内容分离变得更加困难。
有没有办法避免这些问题?
答案 0 :(得分:0)
由于缺乏支持,我继续尝试将SVG渲染器限制在少数流行的浏览器中。我也只检查了样式,因为我对JavaScript不好。
(我的测试是从本地文件完成的,在某些情况下可能很重要。)
我查看了以下浏览器:Internet Explorer,Chrome,Mozilla Firefox,Opera和Safari。我保持它们全部更新(Opera和Safari刚刚下载)所以它们是当前版本。
关于样式,我检查了以下功能:
<image>
,<use>
,<animation>
(来自SVG 1.2 Tiny,否则我使用1.1)。所有三个都在主文件和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环境中)。