在 SO 上的一个答案中注意到页面上HTML
放置了多个标签(文件?)SVG
。在第一个标签中设置了路径模板的<symbol></symbol>
定义,在其他三个标签中读取了这个定义。此外,该声明xmlns
也仅出现在第一种情况下。我尝试替换<symbol>
为<g>
- 一切仍然有效。
因此,问题:
1、如何SVG
在模板或组定义的范围上考虑多个标签?是否可以在文档中的任何 SVG 标签(文件)中定义模板?
2. 为什么其他标签中省略了xmlns
打开文件所需的属性,这是什么规则?SVG
3. 是否可以在 中包含SVG
所有定义的文件,并在中head
使用这些定义。body
SVG
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="0" height="0" viewBox="0 0 9.8 14.8" >
<g id="marker" >
<path d="M9.831 4.916c0 2.714-3.538 8.487-4.913 9.867C3.437 13.307 0 7.631 0 4.916S2.201 0 4.916 0s4.915 2.201 4.915 4.916z"/>
<circle cx="4.912" cy="4.916" r="2.932" fill="#E7EDEF"/>
</g>
</svg>
<svg width="19.6" height="29.6" viewBox="0 0 9.8 14.8">
<use class="u1" href="#marker" />
</svg>
<svg width="19.6" height="29.6" viewBox="0 0 9.8 14.8">
<use class="u2" href="#marker" />
</svg>
<svg width="19.6" height="29.6" viewBox="0 0 9.8 14.8">
<use class="u3" href="#marker" />
</svg>
取自问题页面的代码:Fill property not working for svg sprite
正如正确评论者:@Alexey 十
我还将添加编写 SVG 代码时的错误,HTML 解析器也会跳过。
这是一个浏览器陷阱,即使是经验丰富的开发人员在寻找应用程序失败或意外结果的原因时也会感到困惑。
没有错误消息,HTML 解析器将简单地忽略 SVG 代码中的第一个错误,执行命令,但不会处理进一步的 SVG 行
原因可能是微不足道的 - SVG 命令之一的标签未关闭。
<rect>
应该绘制两个方块:洋红色和黄色,但是由于第一行出错,黄色方块不会显示:
现在让我们将这些文件保存为 SVG 格式并在浏览器中运行它们:
结论:
在我看来,在独立的 SVG 文件中设计一个 SVG 应用程序并在 Firefox 中验证它是最好的。由于 Chrome 正在引入实验性技术,无需等待官方发布。SVG2 版本。
所以在 Chrome 中可能有用的东西在 Safari 和 FF 中可能不起作用
是的,svg文件可以连接到Html inline,即只需复制SVG代码,如你在问题中指出的主题
<object>
当您需要包含大容量的 SVG 文件(例如精灵)时,您可以使用此方法添加文件可以在这里找到如何将 SVG 连接到 HTML
Javascript + SVG + 命名空间
namespace
一个例子,展示了创建 SVG 对象时 JS中指针值的重要性。顺便说一句,这是网络上最常见的问题之一,为什么
setAttribute
SVG 对象的属性在指定时不改变。现在让我们替换
setAttribute
为setAttributeNS