【问题标题】:Align text of svg text element without affecting position对齐 svg 文本元素的文本而不影响位置
【发布时间】:2021-03-29 21:41:10
【问题描述】:

如何在不使用text-anchor 属性的情况下对齐文本标签中的文本?我的问题是使用text-anchor 会改变xy 属性的解释方式,我不希望这样,因为我已经完美地设置了这些元素组的位置:

<text>
<tspan x="206" y="142.2">hello</tspan>
<tspan x="206" dy="15">there, all good?</span>
</text>

我不希望它被改变,因此重新编码整个 svg 设置只是为了文本布局。例如,如果我在这里应用text-anchor="middle",这可以使文本居中,但它将 x (206) 更改为文本的中心。我使用 svg 中的 x 值将文本元素放置在系统中的精确位置,因此 x 坐标的其他解释 1) 破坏了整个布局,2) 甚至无法精确放置文本元素,因为插入文本可能具有可变长度,因此无法预测文本标签所需的 x 坐标以将其放置在您想要的位置。所以我想一定有更好的方法来达到我想要的效果?

【问题讨论】:

  • 你使用引导程序吗?也许有一个文本中心类
  • 你的意思是文本对齐:居中?

标签: html css svg text tspan


【解决方案1】:

您可以通过调整每个文本片段的 dx 来手动居中 SVG 文本,使用在每个片段上调用 ​​getComputedTextLength() 返回的宽度作为输入。

【讨论】:

  • ouf;你的意思是像得到每个片段的长度,然后得到最大的长度,并通过应用负或正 dx 值来居中其他片段,根据 0.5 * 获得的差异?这就是你的意思?一般来说,您是否认为 SVG 适合在给定方向 + 对齐的给定位置绘制带有文本标签的 x-y 图形?似乎不是这样,我想知道是否有比 SVG 更适合的东西..
  • 是的,我就是这个意思。 SVG 非常适合绘制 x-y 图形。但是是的,文本标签很难呈现。这是人们使用 D3 的原因之一 - 它具有人们想要的许多图表功能。
  • 好吧。是的,完全,一个真正的痛苦。但我想你的解决方案几乎是唯一的方法,干杯兄弟!
  • 为后续问题道歉,但您似乎是 svg 方面的专家,所以我想为什么不尝试一下:您是否有建议获取任何 SVG 坐标的方法,例如四个矩形的坐标?有了这个,我就可以做我仍然需要的一切,知道这一点就完美了! (我需要做一些旋转,因此能够精确计算元素的中心点将允许完美旋转;因此问题)。
  • 我也需要支持 IE,所以 getBBox 不是一个选项*
猜你喜欢
  • 2019-06-22
  • 1970-01-01
  • 1970-01-01
  • 2021-01-19
  • 1970-01-01
  • 2016-10-11
  • 1970-01-01
  • 2018-03-17
  • 2010-09-08
相关资源
最近更新 更多