gpt4 book ai didi

html - 当 SVG 嵌入 HTML5 时,可以在 foreignObject 元素中呈现什么?

转载 作者:太空狗 更新时间:2023-10-29 14:05:20 24 4
gpt4 key购买 nike

HTML5 通过 svg 元素支持 SVG。可以使用 foreignObject 元素将其他语言嵌入到 SVG 中。 HTML 可以这样呈现,MathML 也可以。现在的浏览器还能渲染什么? (简单的例子表示赞赏)

foreignObject 元素中的 HTML(canvas 元素)示例:

<!DOCTYPE html>
<html>
<body>
<svg id="svg1" width="200" height="100" xmlns="http://www.w3.org/2000/svg">
<foreignObject x="0" y="0" width="200" height="100">
<canvas id="myCanvas" width="200" height="100"></canvas>
</foreignObject>
</svg>
<script>
var canvas1 = document.getElementById("myCanvas");
var context1 = canvas1.getContext("2d");
context1.fillStyle = "lightblue";
context1.fillRect(20, 40, 50, 50);
</script>
</body>
</html>

foreignObject 元素中的 MathML 示例(使用 FF5):

<!DOCTYPE html>
<html>
<body>
<svg id="svg1" width="300" height="300" xmlns="http://www.w3.org/2000/svg">
<foreignObject x="50" y="50" width="100" height="100">
<math xmlns="http://www.w3.org/1998/Math/MathML">
<mrow>
<mi>A</mi>
<mo>=</mo>
<mfenced open="[" close="]">
<mtable>
<mtr>
<mtd><mi>x</mi></mtd>
<mtd><mi>y</mi></mtd>
</mtr>
<mtr>
<mtd><mi>z</mi></mtd>
<mtd><mi>w</mi></mtd>
</mtr>
</mtable>
</mfenced>
</mrow>
</math>
</foreignObject>
</svg>
</body>
</html>

最佳答案

从技术上讲,任何东西都可以进入foreignObject标签。问题是用户代理是否支持它。对于这一点,似乎没有确定的答案。 SVG spec本身对此(有意)含糊不清:

The 'foreignObject' element allows for inclusion of a foreign namespace which has its graphical content drawn by a different user agent. The included foreign graphical content is subject to SVG transformations and compositing.

幸运的是,规范也defines requiredExtensions 接受以空格分隔的命名空间 URI 列表的属性。这与 switch 一起语句允许基于用户代理功能的半智能回退逻辑。 Example :

<svg width="100" height="50" xmlns="http://www.w3.org/2000/svg">
<switch>
<!-- Render if extension is available -->
<foreignObject width="100" height="50"
requiredExtensions="http://example.com/foreign-object-spec-uri">
<!-- Foreign object content -->
</foreignObject>

<!-- Else, do fallback logic -->
<text x="0" y="20">Not available</text>
</switch>
</svg>

实际呈现的内容似乎完全取决于用户代理(浏览器、Batik 等)。因此,类似地,HTML5 规范有一个 short blurb , 对 foreignObject 中发现的任何非 HTML 内容洗手

The SVG specification includes requirements regarding the handling of elements in the DOM that are not in the SVG namespace, that are in SVG fragments, and that are not included in a foreignObject element. This specification does not define any processing for elements in SVG fragments that are not in the HTML namespace; they are considered neither conforming nor non-conforming from the perspective of this specification.

原来的帖子指出“HTML 可以被呈现......就像 MathML 一样”。自 <math>元素现在是standard HTML5 ,我相信浏览器将该代码解释为 HTML。因此,从技术上讲,浏览器将 MathML 呈现为 HTML 的一部分在技术上更为正确。

根据我的经验,坚持使用 [X]HTML 将是最兼容的……并且可能是您真正需要的全部。您上面的示例都通过使用父 HTML namespace 来工作。如您所见,您可以从 SVG context 中插入 HTML 文档片段。或 HTML context , 所以它可以非常通用。

关于html - 当 SVG 嵌入 HTML5 时,可以在 foreignObject 元素中呈现什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6849192/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com