0

对于 svg 文本元素,坐标应用于基线的左下角。

我的文本示例

我有一个宽度和高度已知的文本,因此我可以设置 row.height = 2 * text.height 然后我想在这一行中放置 2 个文本元素,一个在另一个之上,并将 text.y 坐标设置为coordinate of top left corner of row + text.heigh * 2. 将文本的底线设置在行边框正上方,但此坐标适用于基线,因此文本很少降低。你可以在图片上看到它。

那么,如何知道基线偏移量,设置文本坐标如

y = top left corner of row + height of text - baseline offset ?

我在Jsfiddle上的例子

4

2 回答 2

1

在 SVG 中并没有真正的方法来做到这一点。您可以获得文本元素的边界框,甚至单个字符的边界框。不幸的是,您得到的边界框是“em 框”(屏幕显示中的蓝色框),而不是字形的实际边界。

于 2015-02-21T07:15:12.403 回答
1

@paul-lebeau 您提到 em 框大小的回答让我知道了如何计算基线偏移量。我们有 em 框左上角的坐标以及文本元素基线的高度和坐标。所以

embox.y + embox.heigh - text_baseline.y == baseline_offset

因此我们可以设置文本坐标,如y = row.height - baseline_offset. http://jsfiddle.net/6r14wnsw/1/

而且我发现更简单的收据http://jsfiddle.net/tpafwLmm/1/ 设置文本属性dominant-baseline="text-after-edge"会将基线移动到 embox 的底部边缘 - embox 的text-before-edge顶部边缘。

于 2015-02-21T09:08:46.850 回答