为什么SVG标签需要像XMLNS这样复杂的元素?

时间:2015-02-07 23:47:22

标签: svg

我正在创建一个SVG。 SVG标签看起来像这样:

<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg xmlns="http://www.w3.org/2000/svg" width="800" height="800">

如果我用简单的<svg width="800" height="800">标记替换它,则该文档为空白。在Chrome中,如果我带走上层代码而不是XMLNS,它就可以使用。在IE11中,只要我带走任何东西(DOCTYPE,XMLNS,PUBLIC ......),文档就是空白的。为什么我需要这么复杂的元素?

2 个答案:

答案 0 :(得分:1)

SVG文件是XML文件。因此,当它们是独立文件时,它们需要某种预先转码,以便无论解析它知道该做什么。因此,独立的SVG文件至少需要具有xmlns属性。浏览器要求。但是,除非您要进行正确的XML验证,否则不需要DocType。

当在HTML页面的主体中内联SVG时,您也不需要。 HTML解析器知道SVG内容并知道该怎么做。

答案 1 :(得分:0)

他们不需要。诀窍是你需要使用mime类型的text / html而不是image / svg + xml(或任何其他XML mime类型)。

&#13;
&#13;
<!doctype html>
<svg width="500" height="350">
  <circle id="orange-circle" r="30" cx="50" cy="50" fill="orange" />
</svg>
&#13;
&#13;
&#13;

如果您使用XML mime类型,那么XML支持名称空间,您必须定义它们,因此需要xmlns属性来区分<a>是带有src属性的html <a>还是SVG带有xlink:href属性的<a>元素。 HTML只是神奇地猜到了。