gpt4 book ai didi

javascript - getBoundingClientRect() 应该为嵌入在 SVG 中的 foreignObject XHTML 元素返回什么?

转载 作者:可可西里 更新时间:2023-11-01 13:39:11 26 4
gpt4 key购买 nike

考虑这样的 SVG 文档......

<svg viewBox="0 0 200 200" width="100%" height="100%" …>
<g transform="rotate(45) skewX(10)">
<foreignObject x="100" y="200" width="10" …>
<body xmlns="http://www.w3.org/1999/xhtml">
<p id="foo">Hi Mom!</p>
</body>
</foreignObject>
</g>
</svg>

...和像这样的 JavaScript 代码...

console.log( document.getElementById('foo').getBoundingClientRect() );

注意:

  • HTML 文档的 body 在 SVG 中偏移、旋转和倾斜。
  • SVG 已缩放,因此 1 个 SVG 单位不同于 1 个屏幕像素。

getBoundingClientRect() 是否应该返回网络浏览器中屏幕对齐的边界矩形的左/右/上/下?

或者它应该返回对象在 body 上下文中的坐标,并由用户将其从 foreignObject 空间转换为屏幕像素对于缩放/旋转/倾斜的 SVG?

我对您关于这应该如何表现的看法不太感兴趣,因为我对所涉及的规范如何规定这表现的清晰解释不太感兴趣。

这是一个简单的例子,表明 Chrome 执行前者而 Firefox 执行后者:http://phrogz.net/SVG/html_location_in_svg_in_html.xhtml

编辑:这是描述 Chrome/Safari 对该测试用例的错误处理的 Webkit 错误:https://bugs.webkit.org/show_bug.cgi?id=71819

最佳答案

正如 Boris Zbarsky 在 my (incorrect) bug report 中指出的那样, CSSOM View Module spec说:

The getClientRects() and getBoundingClientRect() methods provide information about the position of the border box edges of an element relative to the viewport.

…和规范elsewhereviewport明确定义为:

[...] defined by CSS 2.1 unless there is an ancestor foreignObject element in the http://www.w3.org/2000/svg namespace in which case that element acts as viewport and initial containing block.

总而言之,getBoundingClientRect()<foreignObject> 中调用了一个 HTML 元素在<svg>元素应返回视口(viewport)内元素的边界框,专门用于 HTML 正文;如果需要,由脚本编写者将其转换为屏幕空间。

关于javascript - getBoundingClientRect() 应该为嵌入在 SVG 中的 foreignObject XHTML 元素返回什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8044338/

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