Para usar texto en SVG se utiliza la etiqueta ‘text’ y se le puede aplicar los mismos efectos que a cualquier otro elemento de SVG. A continuación, he destacado las características que me parecen de mayor interés general pero para mayor detalle hay que ir a la especificación en http://www.w3.org/TR/SVG/text.html
Las principales características del funcionamiento del texto en SVG son:
- Los saltos de línea no se crean automáticamente sino que hay que crearlos mediante la etiqueta ‘tspan’ dentro de la etiqueta ‘text’ o mediante varias etiquetas ‘text’. Esto hace que en párrafos de varias líneas sea más recomendable el uso de html.
- Los textos pueden ir sobre una línea recta o amoldarse a un trazado.
- Los textos son accesibles.
- Se pueden usar fuentes mediante SVG fonts y webfonts.
En el siguiente ejemplo se muestra como el texto por defecto se alinea sobre la línea base de la fuente. Podemos modificar este comportamiento mediante el atributo ‘alignment-baseline’.
1 2 3 4 5 6 |
<text x="5" y="5" font-family="Verdana" font-size="20" fill="skyblue"> Texto de prueba Á É Í Ó Ú </text> <text x="250" y="5" font-family="Verdana" font-size="20" alignment-baseline="text-before-edge" fill="skyblue"> Texto de prueba Á É Í Ó Ú </text> |
Las coordenadas x e y pueden tener 1 o varios valores separados por espacios o comas afectando a los caracteres del texto.
1 2 3 |
<text x="5,20,40,65,95,130,170,215,265,320" y="5" font-family="Verdana" font-size="25" alignment-baseline="text-before-edge" fill="skyblue"> aaaaaaaaaa </text> |
Podemos también variar la posición relativa del texto mediante los atributos ‘dx’ y ‘dy’ teniendo en cuenta que el siguiente texto mantendrá esta posición relativa.
1 2 3 |
<text font-family="Verdana" font-size="25" alignment-baseline="text-before-edge" fill="skyblue"> Texto de color <tspan dy="-10" alignment-baseline="text-before-edge" fill="red" >rojo</tspan> entre azul </text> |
Con’ textLength’ podemos ajustar el texto para que se adapte al tamaño de la caja dado por el valor del atributo que ajusta las propiedades ‘x’, ‘y’, ‘kerning’, ‘letter-spacing’, ‘word-spacing’, ‘dx’ y ‘dy’.
1 2 3 4 |
<rect x="5" y="5" width="570" height="25" fill="white" stroke="grey" stroke-width="1"/> <text x="5" y="0" textLength="570" font-family="Verdana" font-size="25" alignment-baseline="text-before-edge" fill="skyblue"> Texto de prueba para textLength </text> |
Para crear nuevas líneas en un mismo bloque de texto usaremos la etiqueta ‘tspan’ con los atributos ‘x’ e ‘y’.
1 2 3 4 5 6 7 8 |
<text x="5" y="5" font-family="Verdana" font-size="25" fill="skyblue"> <tspan alignment-baseline="text-before-edge"> Texto de prueba para 1 para x e y </tspan> <tspan x="5" y="35" alignment-baseline="text-before-edge"> Texto de prueba para 2 para x e y </tspan> </text> |
El atributo ‘rotate’ nos permite rotar los caracteres y admite varios valores para rotar diferentes letras. Las etiquetas hijas heredan los valores pero podemos asignarles nuevos valores.
1 2 3 4 5 6 |
<text x="5" y="5" rotate="-10" font-family="Verdana" font-size="25" alignment-baseline="text-before-edge" fill="skyblue"> Texto de prueba para rotación </text> <text x="5" y="35" rotate="-20,-10,0,10,20,30,40,50" font-family="Verdana" font-size="25" alignment-baseline="text-before-edge" fill="skyblue"> Texto de <tspan rotate="0" fill="red" alignment-baseline="text-before-edge">prueba</tspan> para rotación </text> |
Podemos referenciar un texto mediante la etiqueta ‘tref’ de forma similar a como hacemos con los elementos gráficos con la etiqueta ‘use’.
1 2 3 4 5 6 7 8 9 |
<defs> <text id="ReferencedText" > Texto referenciado </text> </defs> <text x="5" y="5" font-family="Verdana" font-size="25" alignment-baseline="text-before-edge" fill="skyblue"> Texto no referenciado. <tref xlink:href="#ReferencedText" alignment-baseline="text-before-edge" fill="red" /> </text> |
El texto, además de ir en línea recta, lo puede seguir un trazado. Para ello, hay que colocar una etiqueta ‘textPath’ con un atributo ‘xlink:href’ con el ‘id’ del ‘path’.
1 2 3 4 5 6 |
<path x="5" y="5" id="MyPath" fill="none" d="M5,25c0,0,46.979,22.148,88.59,28.859s93.301-18.569,125.503-19.463c48.322-1.342,71.56,20.371,97.315,20.564c44.295,0.332,71.141-23.249,97.986-24.591c34.212-1.71,57.718,22.148,70.47,22.148s36.242-19.463,52.35-20.134" stroke="red" /> <text x="5" y="5" font-family="Verdana" font-size="20" alignment-baseline="text-before-edge" fill="skyblue"> <textPath xlink:href="#MyPath"> Texto en trazado, texto en trazado, texto en trazado, texto en trazado, texto en trazado, texto en trazado. </textPath> </text> |
Tags: SVG text