8

允许在 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>

规范(23.2,第三段)(我引用:)“如果你想将 SVG 嵌入 XHTML 中的 SVG 中的 XHTML 中的 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 类)......这就是小提琴全屏);内联 svg 中没有正文标记。

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

4

4 回答 4

7

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

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

听从 robertc 的建议要容易得多。

于 2012-06-07T18:36:24.227 回答
3

您是否特别需要 body 元素?为什么不用非特权元素包装您的内容:

<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>
于 2012-06-07T17:36:32.980 回答
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

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

于 2012-12-27T12:41:44.290 回答
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 的支持充其量仍然是“古怪的”。

于 2014-03-25T09:49:24.703 回答