文本

当谈论 SVG 中的文本时,我们必须区分两个几乎完全独立的主题。一个是图像中文本的包含和显示,另一个是 SVG 字体。后者将在教程的后续部分中介绍,而本页将重点关注第一部分:将文本引入 SVG 图像。

基础知识

我们在 入门示例 中已经看到,text 元素可用于在 SVG 文档中放置任意文本。

xml
<text x="10" y="10">Hello World!</text>

xy 属性决定文本在视口中的位置。text-anchor 属性,其值可以是 "start""middle""end""inherit",决定了文本从该点流动的方向。dominant-baseline 属性决定了垂直对齐方式。

与形状元素一样,文本可以使用 fill 属性着色,并使用 stroke 属性描边。两者都可以引用渐变或图案,这使得 SVG 中的文本着色非常强大。

设置字体属性

文本的一个重要部分是显示它的字体。SVG 提供了一组属性,其中许多与其 CSS 对应项相似,用于启用字体选择。以下每个属性都可以作为属性设置,或通过 CSS 声明设置:font-familyfont-stylefont-weightfont-variantfont-stretchfont-sizefont-size-adjustletter-spacingword-spacingtext-decoration

tspan

此元素用于标记较大文本的子部分。它必须是 text 元素或另一个 tspan 元素的子元素。一个典型的用例是将句子中的一个单词显示为粗体红色。

html
<svg width="350" height="60" xmlns="http://www.w3.org/2000/svg">
  <text>
    This is
    <tspan font-weight="bold" fill="red">bold and red</tspan>
  </text>

  <style>
    <![CDATA[
      text {
        dominant-baseline: hanging;
        font: 28px Verdana, Helvetica, Arial, sans-serif;
      }
    ]]>
  </style>
</svg>

tspan 元素具有以下自定义属性

x

为包含的文本设置一个新的绝对 x 坐标。这会覆盖默认的当前文本位置。该属性还可以包含一个数字列表,这些数字会依次应用于 tspan 元素的单个字符。

dx

从默认的当前位置开始,以水平偏移量 dx 绘制文本。同样,您可以提供一个值列表,这些值将应用于连续的字符,从而随着时间的推移累积偏移量。

同样,有 ydy 用于垂直位移。

rotate

将所有字符按此度数旋转。数字列表使每个字符旋转到其相应的值,剩余字符则根据最后一个值进行旋转。

文本长度

给出字符串的计算长度。这是一个更晦涩的属性,旨在允许渲染引擎在自身测量的文本长度不符合此处提供的值时微调字形的间距。

textPath

此元素通过其 href 属性获取任意路径,并沿着该路径排列其所包含的字符。

html
<svg width="200" height="100" xmlns="http://www.w3.org/2000/svg">
  <path id="my_path" d="M 20,20 C 80,60 100,40 120,20" fill="transparent" />
  <text>
    <textPath xmlns:xlink="http://www.w3.org/1999/xlink" href="#my_path">
      A curve.
    </textPath>
  </text>

  <style>
    <![CDATA[
      text {
        dominant-baseline: hanging;
        font: 28px Verdana, Helvetica, Arial, sans-serif;
      }
    ]]>
  </style>
</svg>