在HTML中嵌入嵌入式SVG中的HTML?

时间:2012-06-07 16:16:38

标签: html html5 xhtml svg embedding

允许在HTML中嵌入SVG ......

<!DOCTYPE html>
<html lang="en">
    <head>
        <title>Hmmm....</title>
    </head>
    <body>
        <svg xmlns="http://www.w3.org/2000/svg" version="1.1" x="0" y="0" width="500px" height="100%">
            <text>Hello cruel world!</text>
        </svg>
    </body>
</html>

......反之亦然:

<svg xmlns="http://www.w3.org/2000/svg" version="1.1" x="0" y="0" width="500px" height="100%">
    <foreignObject x="0" y="0" width="100%" height="100%">
        <body xmlns="http://www.w3.org/1999/xhtml">
            <h1>Goodbye cruel world...</h1>
        </body>
    </foreignObject>
</svg>

规范say(23.2,第三段)(我引用:)“如果你想在SVG中的XGML中将SVG嵌入到SVG中的SVG中,那就没关系......”。我想哇,那太深了!并且这样做了:

<!DOCTYPE html>
<html lang="en">
    <head>
        <title>Yeah!</title>
    </head>
    <body>
        <svg xmlns="http://www.w3.org/2000/svg" version="1.1" x="0" y="0" width="500px" height="100%">
            <foreignObject x="0" y="0" width="100%" height="100%">
                <body class="svgbody" xmlns="http://www.w3.org/1999/xhtml">
                    <h1>And hello again!</h1>
                </body>
            </foreignObject>
        </svg>
    </body>
</html>

但是所有浏览器都将body标签与HTML5 body标签合并(HTML5 body标签获取svgbody类)...这是fiddlefullscreen);内联svg中没有正文标记。

我不知道为什么,我希望你能帮助我!可以通过将SVG放在不同的文件中来解决,但我不想听到它。为什么不起作用?

4 个答案:

答案 0 :(得分:6)

要记住的一件事是SVG文档正在XML文档中讨论SVG中的XHTML。您不是使用XML而是使用HTML。这是HTML解析器的一个功能,它以您看到的方式合并正文标记。

如果您使用的是XML解析器,则不会发生合并。要实现此目的,您需要使用application/xhtml+xml内容类型提供文档。如果您这样做,则需要修复其他问题,例如向xmlns="http://www.w3.org/1999/xhtml"元素添加html属性。

遵循罗伯特的建议要容易得多。

答案 1 :(得分:3)

你是否需要特定的身体元素?为什么不用非特权元素包装您的内容:

<body>
    <svg xmlns="http://www.w3.org/2000/svg" version="1.1" x="0" y="0" width="100%" height="100%">
        <foreignObject x="0" y="0" width="100%" height="100%">
            <body xmlns="http://www.w3.org/1999/xhtml">
                <div class="svgbody">
                    <h1>This sucks less</h1>
                </div>
            </body>
        </foreignObject>
    </svg>
</body>

答案 2 :(得分:1)

如果你想让html5解析器忽略svg及其中的所有内容() 你可以把svg放到评论中;让svg解析器忽略html-note使用cdata:

<html><body><svg>
<![CDATA[  <!--  ]]>
    <ForeingObject />
<![CDATA[   -->  ]]>
</svg></body></html>

http://www.w3schools.com/xml/xml_cdata.asp

尝试这样的事情......

答案 3 :(得分:0)

HTML in SVG in HTML中,我找到了以下示例代码。它对我来说很好。

<!DOCTYPE html>
<html>
<head>
  <meta http-equiv="content-type" content="text/html; charset=UTF-8">
  <title>HTML in SVG in HTML</title>
  <style type='text/css'>
    svg { border: 1px solid black; }
    svg div { border: 1px dotted blue; }
  </style>
</head>
<body>
<svg xmlns="http://www.w3.org/2000/svg" width="800" height="500">
  <foreignObject class="node" x="46" y="22" width="200" height="300">
    <body xmlns="http://www.w3.org/1999/xhtml">
      <div>The quick brown fox jumps over the lazy dog. Pack my box with
         five dozen liquor jugs</div>
    </body>
  </foreignObject>
</svg>
</body>
</html>

不过,请注意,即使在今天(2014年3月),对HTML文档中的内联SVG的支持仍然是“古怪”。