SVG 1.2 Tiny a ajouté un habillage de texte, mais la plupart des implémentations de SVG que vous trouverez dans le navigateur (à l'exception d'Opera) n'ont pas implémenté cette fonctionnalité. C'est généralement à vous, le développeur, de positionner le texte manuellement.
La spécification SVG 1.1 donne un bon aperçu de cette limitation et des solutions possibles pour la surmonter:
Chaque élément 'text' entraîne le rendu d'une seule chaîne de texte. SVG n'effectue aucun saut de ligne ou retour à la ligne automatique. Pour obtenir l'effet de plusieurs lignes de texte, utilisez l'une des méthodes suivantes:
- L'auteur ou le package de création doit pré-calculer les sauts de ligne et utiliser plusieurs éléments «texte» (un pour chaque ligne de texte).
- L'auteur ou le package de création doit pré-calculer les sauts de ligne et utiliser un seul élément 'text' avec un ou plusieurs éléments enfants 'tspan' avec des valeurs appropriées pour les attributs 'x', 'y', 'dx' et 'dy' pour définir de nouvelles positions de départ pour les personnages qui commencent de nouvelles lignes. (Cette approche permet à l'utilisateur de sélectionner du texte sur plusieurs lignes de texte - voir Sélection de texte et opérations du presse-papiers.)
- Exprimez le texte à rendre dans un autre espace de noms XML tel que XHTML [XHTML] incorporé en ligne dans un élément 'ForeignObject'. (Remarque: la sémantique exacte de cette approche n'est pas complètement définie pour le moment.)
http://www.w3.org/TR/SVG11/text.html#Introduction
En tant que primitive, l'habillage de texte peut être simulé en utilisant l' dy
attribut et les tspan
éléments, et comme mentionné dans la spécification, certains outils peuvent automatiser cela. Par exemple, dans Inkscape, sélectionnez la forme souhaitée et le texte souhaité, puis utilisez Texte -> Flux dans le cadre. Cela vous permettra d'écrire votre texte, avec un habillage, qui s'enroulera en fonction des limites de la forme. Assurez-vous également de suivre ces instructions pour indiquer à Inkscape de maintenir la compatibilité avec SVG 1.1:
http://wiki.inkscape.org/wiki/index.php/FAQ#What_about_flowed_text.3F
En outre, il existe des bibliothèques JavaScript qui peuvent être utilisées pour automatiser de manière dynamique l'habillage de texte:
http://www.carto.net/papers/svg/textFlow/
Il est intéressant de noter la solution de CSVG pour envelopper une forme dans un élément de texte (par exemple, voir leur exemple "bouton"), bien qu'il soit important de mentionner que leur implémentation n'est pas utilisable dans un navigateur:
http://www.csse.monash.edu .au / ~ clm / csvg / about.html
Je mentionne cela parce que j'ai développé une bibliothèque inspirée de CSVG qui vous permet de faire des choses similaires et fonctionne dans les navigateurs Web, même si je ne l'ai pas encore publiée.