SVG:textPath深入理解


SVG的文本可以沿着一條自定義的Path來排布,比如曲線、圓形等等,使用方式如下所示(來源MDN):

<svg viewBox="0 0 1000 300"
     xmlns="http://www.w3.org/2000/svg" 
     xmlns:xlink="http://www.w3.org/1999/xlink">
  <defs>
    <path id="MyPath"
          d="M 100 200 
             C 200 100 300   0 400 100
             C 500 200 600 300 700 200
             C 800 100 900 100 900 100" />
  </defs>

  <use xlink:href="#MyPath" fill="none" stroke="red"  />

<text font-family="Verdana" font-size="42.5"> <textPath xlink:href="#MyPath"> We go up, then we go down, then up again </textPath> </text>
  <!-- Show outline of the viewport using 'rect' element -->
  <rect x="1" y="1" width="998" height="298"
        fill="none" stroke="black" stroke-width="2" />
</svg>

 

效果如下所示:

 

使用很簡單,在<defs>下定義一個path,在<text>元素下添加一個textPath引用,即可達到效果。

我們來對代碼做一點兒修改,給text元素添加x和y:

 <text x=100 y=100  font-family="Verdana" font-size="42.5">
    <textPath xlink:href="#MyPath">
      We go up, then we go down, then up again
    </textPath>
  </text>

 

效果變成了下面這樣:

 

可以注意到,text並沒有進行簡單的平移操作(相對於原位置向x方向移動100px,y方向移動100px)。

這要如何理解呢?

原因很簡單,text的坐標系被修改了,沒有加入textPath之前,text處於一個直角坐標系下,x軸和y軸是兩條相互垂直的直線。

加入textPath之后,text的坐標系有如下性質:

1、坐標系的x軸為path;

2、坐標系的y軸在x軸的任意點上,方向都不一致,但是必然是該點對於x軸切線的垂直線

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM