SVG入门-文字

658 阅读2分钟

SVG 文字


该部分分为4个主要部分:

  • <text>和<tspan>标签详解
  • 文本水平垂直居中问题
  • <textpath>让文本在指定路径上排列
  • 插入超链接
<text>和<tspan>

<text>和<tspan>标签是定义文本的基本标签。

<text>


参数描述默认值
x文本绘制x轴位置0
y文本绘制y轴位置0
dx每个字符相对前一个字符的偏移距离0
dy每个字符相对前一个字符的偏移距离0
<svg width="100%" height="100%" version="1.1" xmlns="http://www.w3.org/2000/svg">
    <text x="100" y="100" dx="20 40 60 80 100" fill="black" style="font-size:40px;">text测试</text>
    <path d="M100,0 V200 M0,100 H200" stroke="red"/>
</svg>

文字并不是完全在左下角位置,而是在一个叫基线(baseline)的位置,所以文字会在哪个位置,还得看该字体的基线。

在这里插入图片描述

<tspan>


<tspan>标签是用在<text>标签里面的,也可嵌套使用。所有text标签可用的属性,tspan也都可以用。

<svg width="100%" height="100%" version="1.1" xmlns="http://www.w3.org/2000/svg">
    <text x="100" y="100" dy="100" fill="black" style="font-size:40px;">
        <tspan fill="blue" dy="-20 10">ts</tspan><tspan fill="red">pan测试</tspan>
    </text>
    <path d="M100,0 V200 M0,100 H200" stroke="red"/>
</svg>

在这里插入图片描述

需要注意的是:

  • 两个标签不支持自动换行。
  • 可以用style属性设置样式(基本支持大部分CSS属性)。
  • 可以通过程序计算dx、dy值来得到各自文字排版(像波浪形或一些函数曲线)。
  • text和tspan标签设置的dx、dy属性是会往下传递的。也就是在没有设置情况下,后面字符会用沿用上一个字符的dx、dy值。
  • 如果tspan设置了dx、dy属性,就会覆盖text标签上的dx、dy值,而不是叠加计算。
文本水平垂直居中

text-anchor属性可设置文本水平排列,有三个取值 start | middle | end。

<svg width="100%" height="100%" version="1.1" xmlns="http://www.w3.org/2000/svg">
    <text x="200" y="50" text-anchor="start" fill="black" style="font-size:40px;">text</text>
    <text x="200" y="100" text-anchor="middle"  fill="black" style="font-size:40px;">text</text>
    <text x="200" y="150" text-anchor="end" fill="black" style="font-size:40px;">text</text>
    <path d="M200,0 V200 M0,100 H400" stroke="red"/>
</svg>

在这里插入图片描述 dominant-baseline属性可设置文本垂直排列。居中效果不像不理想。

<textpath>


<textpath>可以让文本在指定路径上排列。

<svg width="100%" height="100%" version="1.1" xmlns="http://www.w3.org/2000/svg"  xmlns:xlink ="http://www.w3.org/1999/xlink">
    <path id="p1" d="M100,200 Q200 100 300 200 T 500 200" stroke="green" fill="none"/>
    <text style="font-size:20px;">
        <textPath xlink:href="#p1">textpath可以让文本在指定路径上排列,textpath可以让文本在指定路径上排列</textPath>
    </text>
</svg>

在这里插入图片描述 超出Path的部分,浏览器不进行渲染。

<textpath>的渲染原理大致如下: 在这里插入图片描述

  1. 浏览器会算出第一个字符的宽度。
  2. 结合路径的起点得到另一个点。
  3. 取得中间的那个点做一条的切线和法线。
  4. 然后将该字符放到这个位置上。
  5. 将上一个字符最后一个点作为下一个字符的起点。
  6. 循环第1步,直到文本渲染完毕。

文本在路径上的偏移可以用定位属性 x, y,dx,dy,text-anchor和startOffset属性。 在这里插入图片描述 从上图可得到结论:

  1. x/dx/startOffset可以设置字符在路径上的渲染起点。
  2. y属性设置是没有任何效果的。
  3. dy可设置字符在法线上的偏移。
  4. text-anchor是设置文本水平排列效果。
标签

标签可以添加到任意的图形上。

属性描述
xlink:href指定链接地址
xlink:title指定链接提示
target指定打开目标
<svg width="100%" height="100%" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
   <a xlink:title="百度" xlink:href="https://www.baidu.com"  target="_blank">
        <rect x="50" y ="50" width="200" height="200" fill="red"/>
    </a>
</svg>

在这里插入图片描述