Align lines of text to center in SVG

后端 未结 3 1135
醉梦人生
醉梦人生 2020-12-29 18:34

I need to output multiple lines of text in SVG. For that I\'m using the following scheme:


   First line 
  

        
相关标签:
3条回答
  • 2020-12-29 18:40

    If you add text-anchor="middle" to each tspan you will center them (you have to remove the space between the tspans as well, otherwise the extra space will be considered as part of the first line and they won't be completely centered).

    For example:

    <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>
    

    See: JSFiddle

    0 讨论(0)
  • 2020-12-29 18:46

    DEMO

    text-anchor='start' for right align.

    text-anchor='middle' for middle align.

    text-anchor='end' for left align.

    Code from demo:

    <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>
    

    Read more about text-anchor property here

    0 讨论(0)
  • 2020-12-29 18:58

    Key points to horizontally centering the text:
    1. x="50%"
    2. text-anchor='middle'

    In your case, you may write as:

    <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>
    
    0 讨论(0)
提交回复
热议问题