El texto en SVG

Archivado en: SVG

Vamos a ver como podemos añadir texto en nuestros SVG.

Antes de empezar solamente recordar que para utilizar fuentes especificas hay que recurrir a @font-face o a servicios como Google Web Fonts o Typekit. Para los ejemplos de este post voy a utilizar Verdana que pertenece a la lista de web safe fonts.

Text

Para añadir texto en SVG tenemos a nuestra disposición la etiqueta text. El texto lo posicionaremos con las coordenadas x para la horizontal y con y para la vertical. También podemos rotar el texto con el atributo rotate. Añadir espacio entre letras con textLength y ajustar este espacio con lengthAdjust.

Vamos a ver un ejemplo con todos estos atributos.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
<svg version="1.1" xmlns="http://www.w3.org/2000/svg"
  xmlns:xlink="http://www.w3.org/1999/xlink"
  width="1200" height="800" viewBox="0 0 1200 800">

  <text x="50" y="20"
        font-family="Verdana"
        font-size="25"
        fill="red">
    Texto sin nada.
  </text>

  <text x="50" y="60"
        font-family="Verdana"
        font-size="25"
        fill="red"
        rotate="25">
    Texto con rotate(25)
  </text>

  <text x="50" y="100"
        font-family="Verdana"
        font-size="25"
        fill="red"
        textLength="1000">
    Texto con textLength(1000)
  </text>

  <text x="50" y="140"
        font-family="Verdana"
        font-size="25"
        fill="red"
        textLength="1000"
        lengthAdjust="spacingAndGlyphs">
    Texto con textLength(1000) y lengthAdjust(spacingAndGlyphs)
  </text>
    <text x="50" y="180"
        font-family="Verdana"
        font-size="25"
        fill="red"
        textLength="1000"
        lengthAdjust="spacing">
    Texto con textLength(1000) y lengthAdjust(spacing)
  </text>

La etiqueta text acepta mas atributos, algunos os sonaran de **CSS **: alignment-baseline, baseline-shift, clip, clip-path, clip-rule, color, color-interpolation, color-interpolation-filters, color-profile, color-rendering, cursor, direction, display, dominant-baseline, enable-background, fill, fill-opacity, fill-rule, filter, flood-color, flood-opacity, font-family, font-size, font-size-adjust, font-stretch, font-style, font-variant, font-weight, glyph-orientation-horizontal, glyph-orientation-vertical, image-rendering, kerning, letter-spacing, lighting-color, marker-end, marker-mid, marker-start, mask, opacity, overflow, pointer-events, shape-rendering, stop-color, stop-opacity, stroke, stroke-dasharray, stroke-dashoffset, stroke-linecap, stroke-linejoin, stroke-miterlimit, stroke-opacity, stroke-width, text-anchor, text-decoration, text-rendering, unicode-bidi, visibility, word-spacing, writing-mode.

Si queréis ver detalladamente lo que hace cada uno de ellos podéis hacerlo en este link de la W3C, también en este de Jenkov.

Tspan

La etiqueta tspan la podemos utilizar para posicionar absolutamente o relativamente los caracteres que incluyamos dentro de la etiqueta. También para resaltar solamente un trozo de texto, cambiarlo de color o rotarlo.

Vamos a ver un ejemplo con cada una de las posibilidades.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
<text x="50" y="50"
        font-family="Verdana"
        font-size="25"
        fill="red">
    Este texto es normal.

    <tspan font-size="40" fill="olive">
    Este texto va en un tspan
  </tspan>
  </text>

  <text x="50" y="200"
        font-family="Verdana"
        font-size="25"
        fill="red">
    Este texto es normal.

    <tspan fill="blue" dx="-200" dy="50">
    Este texto va en un tspan
  </tspan>
  </text>

  <text x="50" y="500"
        font-family="Verdana"
        font-size="25"
        fill="red">
    Este texto es normal.

    <tspan fill="blue" x="30 60 100 200 250 350 400 500 550" y="550">
    Esto tspan
  </tspan>
  </text>

En el primero cambió el color del texto y aumento el tamaño de la letra. En el segundo modifico la posición de las coordeandas X e Y. En el tercero modifico la posición de cada uno de los caracteres.

textPath

Con la etiqueta textPath logramos que un texto fluya a lo largo delpath que nosotros dibujemos. Es lo mismo que vimos en el post sobre animaciones con animateMotion. También tenemos disponible el atributo startoffset para indicarle en que parte del path queremos que empiece a fluir el texto, por defecto viene a 0%.

Vamos a ver un par de ejemplos

1
2
3
4
5
6
7
8
9
10
<defs>
    <path id="ejemplo"
          d="M197,167.5c0,0,433-285.5,433,0"/>
  </defs>

  <text font-family="Verdana" font-size="30" fill="red">
    <textPath xlink:href="#ejemplo">
      Este texto va dentro de un textPath
    </textPath>
  </text>

1
2
3
4
5
6
7
8
9
<defs>
    <path id="ejemplo" d="M197,167.5c0,0,433-285.5,433,0"/>
  </defs>

  <text font-family="Verdana" font-size="15" fill="red">
    <textPath xlink:href="#ejemplo" startOffset="20%">
      Este texto va dentro de un textPath con startOffset(20%)
    </textPath>
  </text>

Tref

Por último vamos a ver el elemento tref, el cúal solamente esta disponible en Safari. Con este elemento lo que conseguimos es llamar a un texto que tenemos referenciado dentro de la etiqueta defs.

Os dejo con el ejemplo que nos proporcionan en la W3C.

1
2
3
4
5
6
7
8
9
10
11
12
13
<defs>
    <text id="ReferencedText">
      Referenced character data
    </text>
  </defs>
  <desc>Example tref01 - inline vs reference text content</desc>

  <text x="100" y="100" font-size="45" fill="blue" >
    Inline character data
  </text>
  <text x="100" y="200" font-size="45" fill="red" >
    <tref xlink:href="#ReferencedText"/>
  </text>

SCALABLE, un libro sobre SVGA lo largo de 15 capítulos, 120 páginas y más de 70 ejemplos vamos a ver todo lo que podemos hacer con SVG. Tu pones el precio, disponible desde 0$ para descargar desde LeanPub(PDF, ePUB y MOBI).