SVG 1.2 Tiny agregó un ajuste de texto, pero la mayoría de las implementaciones de SVG que encontrará en el navegador (con la excepción de Opera) no han implementado esta función. Normalmente depende de usted, el desarrollador, posicionar el texto manualmente.
La especificación SVG 1.1 proporciona una buena visión general de esta limitación y las posibles soluciones para superarla:
Cada elemento 'texto' hace que se represente una sola cadena de texto. SVG no realiza saltos de línea automáticos ni ajuste de palabras. Para lograr el efecto de varias líneas de texto, use uno de los siguientes métodos:
- El autor o paquete de autoría necesita calcular previamente los saltos de línea y utilizar múltiples elementos de "texto" (uno para cada línea de texto).
- El autor o paquete de autoría necesita calcular previamente los saltos de línea y usar un solo elemento 'texto' con uno o más elementos secundarios 'tspan' con valores apropiados para los atributos 'x', 'y', 'dx' y 'dy' para establecer nuevas posiciones de inicio para aquellos personajes que comienzan nuevas líneas. (Este enfoque permite la selección de texto del usuario en varias líneas de texto; consulte Selección de texto y operaciones del portapapeles).
- Exprese el texto para que se represente en otro espacio de nombres XML, como XHTML [XHTML] incrustado en línea dentro de un elemento 'foreignObject'. (Nota: la semántica exacta de este enfoque no está completamente definida en este momento).
http://www.w3.org/TR/SVG11/text.html#Introduction
Como primitivo, el ajuste de texto se puede simular usando el dy
atributo y los tspan
elementos, y como se menciona en la especificación, algunas herramientas pueden automatizar esto. Por ejemplo, en Inkscape, seleccione la forma que desee y el texto que desee, y use Texto -> Flujo en marco. Esto le permitirá escribir su texto, con ajuste, que se ajustará según los límites de la forma. Además, asegúrese de seguir estas instrucciones para decirle a Inkscape que mantenga la compatibilidad con SVG 1.1:
http://wiki.inkscape.org/wiki/index.php/FAQ#What_about_flowed_text.3F
Además, hay algunas bibliotecas de JavaScript que se pueden usar para automatizar dinámicamente el ajuste de texto:
http://www.carto.net/papers/svg/textFlow/
Es interesante observar la solución de CSVG para ajustar una forma a un elemento de texto (por ejemplo, ver su ejemplo de "botón"), aunque es importante mencionar que su implementación no se puede usar en un navegador:
http://www.csse.monash.edu .au / ~ clm / csvg / about.html
Menciono esto porque he desarrollado una biblioteca inspirada en CSVG que le permite hacer cosas similares y funciona en navegadores web, aunque aún no la he lanzado.