我需要在SVG中输出多行文本。 为此,我使用以下方案:
<text>
<tspan> First line </tspan>
<tspan> Second line </tspan>
</text>
文本的第一行和第二行可以有不同数量的字符,可以动态更改。 我希望第二行显示在第一行下面,并且两个文本都要居中。
我可以通过为第二个dy="15"
添加<tspan>
来在第一行下方显示第二行。
我可以通过向<tspan>
添加text-anchor="middle"
来对齐每个人<tspan>
中的文字。
但是如何对那些x="0"
进行相对中心对齐?
我尝试对每个<tspan>
使用<tspan>
但显然它不起作用,因为每个<tspan>
具有不同的宽度,并且较短行中的渲染文本转移到左
是否有办法仅使用CSS和/或SVG对齐2 {{1}}个不同宽度的中心。
答案 0 :(得分:50)
如果您将text-anchor="middle"
添加到每个 tspan
,您将把它们放在中心位置(您还必须删除 tspans之间的空间,否则额外的空间将被视为第一行的一部分,它们不会完全居中。)
例如:
<svg>
<text y="50" transform="translate(100)">
<tspan x="0" text-anchor="middle">000012340000</tspan><tspan x="0" text-anchor="middle" dy="15">1234</tspan>
</text>
</svg>
请参阅: JSFiddle
答案 1 :(得分:32)
<强> DEMO 强>
text-anchor='start'
右对齐。
text-anchor='middle'
用于中间对齐。
text-anchor='end'
左对齐。
演示代码:
<svg width="100%" height="230" viewBox="0 0 120 230"
xmlns="http://www.w3.org/2000/svg" version="1.1">
<!-- Materialisation of anchors -->
<path d="M60,15 L60,110 M30,40 L90,40 M30,75 L90,75 M30,110 L90,110" stroke="grey" />
<!-- Anchors in action -->
<text text-anchor="start"
x="60" y="40">This text will align right</text>
<text text-anchor="middle"
x="60" y="75">This text will align middle</text>
<text text-anchor="end"
x="60" y="110">This text will align left</text>
<!-- Materialisation of anchors -->
<circle cx="60" cy="40" r="3" fill="red" />
<circle cx="60" cy="75" r="3" fill="red" />
<circle cx="60" cy="110" r="3" fill="red" />
<style><![CDATA[
text{
font: bold 15px Verdana, Helvetica, Arial, sans-serif;
}
]]></style>
</svg>
详细了解text-anchor属性 here
答案 2 :(得分:6)
水平居中文字的关键点:
1. x="50%"
2. text-anchor='middle'
在您的情况下,您可以写为:
<svg style="width:100%">
<text y="50">
<tspan x="50%" text-anchor="middle"> First line </tspan>
<tspan x="50%" dy="15" text-anchor="middle"> Second line </tspan>
</text>
</svg>