【问题标题】:Vertically Center Multi-line SVG Text垂直居中多行 SVG 文本
【发布时间】:2015-09-10 01:08:49
【问题描述】:

谁能给我一个示例,说明如何在 SVG 中垂直居中多行文本?我用谷歌搜索了很多对 alignment-baselinedominant-baseline 的引用,但没有具体的例子可供我查看。

例如,在以下 SVG 中,TEXT 元素被其左上角锁定。文本在该 y 位置之后开始出现。如果我想让文本在那个 y 位置的上方和下方均匀分布,我需要做什么?

<text x="110" y="50" dy="0">
   <tspan dy="0em" x="110" style="font-weight: bold; fill: rgb(74, 76, 77);">
     <tspan x="110" dy="0em">This is my long quotation that will now wrap</tspan>
     <tspan x="110" dy="1.1em">over multiple lines, maybe even two lines!</tspan>
     <tspan x="110" dy="1.1em">Isn't that amazing?</tspan>
   </tspan>
   <tspan dy="1.5em" x="110" style="font-style: italic;">
     Speaker, Speaker Description
   </tspan>
</text>

(如果有帮助,我正在通过 D3 生成它)

【问题讨论】:

  • 请提供一张现在的照片和你想要的东西。这将比阅读文本更有帮助。

标签: css svg


【解决方案1】:

您不能真正使用 SVG 进行自动居中。 SVG 没有适当的自动布局。

但是,您可以使用dy,就像您正在做的那样,相对于您的基线定位文本。记住dy 也可以是负数。

<svg width="400" height="150">

  <line x1="110" y1="50" x2="400" y2="50" stroke="red"/>
  <text x="110" y="50">
     <tspan x="110" dy="-0.8em">This is my long quotation that will now wrap</tspan>
     <tspan x="110" dy="1.1em">over multiple lines, maybe even two lines!</tspan>
     <tspan x="110" dy="1.1em">Isn't that amazing?</tspan>
  </text>

</svg>

您可以做的另一件事是使用&lt;foreignObject&gt; 元素将HTML 嵌入到您的SVG 中。显然这只适用于浏览器。

【讨论】:

  • 嗯,这令人失望!我可以通过 Javascript 手动完成 - 测量文本尺寸,然后适当地更改 y 值。谢谢:)
  • 即使是单行文本也是如此吗?
  • 您可以尝试使用alignment-baseline: middle,但这并非在所有情况下都有效,并且可能无法提供所需的居中效果。
猜你喜欢
  • 2013-10-15
  • 2011-05-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-09-16
  • 2021-07-19
相关资源
最近更新 更多