【问题标题】:Why SVG bbox method on Text element gives different result in different browser?为什么文本元素上的 SVG bbox 方法在不同的浏览器中给出不同的结果?
【发布时间】:2013-05-01 19:55:45
【问题描述】:

我有一个 SVG 文本元素。我在 IE9、Chrome 和 Firefox 中得到了它的 bbox,它们三个都给了我不同的值。

我创建了一个非常简单的jsfiddle,它显示了一个 SVG 文本及其大小,因此您可以明白我的意思。我还尝试了客户端 rect 看看它是否更好。

HTML/SVG

<svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="75px">
    <text font-size="8pt" id="text_name" x="30" y="44" fill="#000000" stroke-width="0pt" font-family="Arial,Helvetica,sans-serif" text-anchor="middle" visibility="inherit">
        <tspan x="30" y="44" dy="8">Text Content</tspan></text>
</svg> 
<div id="size"></div>

测试javascript

var bbox1 = document.getElementById("text_name").getBBox();
var f = document.getElementById("text_name").getClientRects();
document.getElementById("size").innerHTML = "<p>Width:" + bbox1.width + " Height: " + bbox1.height + "<br>" +  "Width:" + f[0].width +  " Height: " + f[0].height + "</p>";

如您所见,使用的字体是常见的 Arial,在三个测试的浏览器中都有,并且还指定了 font-size。因此,我期望文本在所有三个浏览器中具有相同的边界。我需要计算文本边界,以便可以将其导出并在另一个工具中重用,因此我需要一个一致的值。

如果我能找出这些值不同的原因,我可以进行适当的调整以确保边界适用于所有情况。

下面是getBBox()在不同浏览器中的结果:

IE9 : Width:61.029998779296875 Height: 12.260002136230468
Chrome: Width:61 Height: 14
Firefox: Width:64.63671875 Height: 13

【问题讨论】:

  • 可以使用三个值中的最大值。
  • @cuixiping 你的意思是所有三个浏览器的上限?问题是我没有其他界限可以比较。我的客户使用一个浏览器,它给了我一个我必须使用的价值。
  • 所以 6 年后,Edge 和 Chrome 现在给出了相似的结果,而 Firefox 有不同的值。边缘:宽度:61.90625 高度:12 铬:宽度:61.90625 高度:12 Firefox:宽度:63 高度:12
  • 你不应该期望 firefox 和 chrome 有完全相同的结果。而且你也不应该期望 windows 和 mac 有完全相同的结果。

标签: javascript svg


【解决方案1】:

我会考虑设置基础 SVG 的视口以获得更好的结果。可能需要视图装箱以确保文本元素的大小调整是一致的结果。链接的文章非常详细地介绍了这些内容。

<svg height="14" width="61" ...

SVG Viewport and View Box

【讨论】:

  • 恐怕这没有帮助。 Melanie 提出了一个关于在不同浏览器中获取文本大小的问题。视口的设置在两者中是相同的。我仍然面临同样的问题,还没有找到合适的解决方案。
  • 我什至玩过 box-sizing css 属性但没有成功
猜你喜欢
  • 2020-12-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多