Je voudrais afficher un <text>
en SVG ce qui encapsulerait automatiquement la ligne dans le conteneur de <rect>
la même manière que le texte HTML remplit des <div>
éléments. Y a-t-il un moyen de le faire? Je ne veux pas positionner les lignes avec parcimonie en utilisant <tspan>
s.
108
Voici une alternative:
Notant que même si ForeignObject peut être signalé comme étant pris en charge avec cette fonctionnalité, il n'y a aucune garantie que HTML puisse être affiché car cela n'est pas requis par la spécification SVG 1.1. Il n'y a pas de chaîne de fonctionnalités pour le support html-in-foreignobject pour le moment. Cependant, il est toujours pris en charge dans de nombreux navigateurs, il est donc susceptible de devenir nécessaire à l'avenir, peut-être avec une chaîne de fonctionnalités correspondante.
Notez que l' élément 'textArea' dans SVG Tiny 1.2 prend en charge toutes les fonctionnalités standard de svg, par exemple le remplissage avancé, etc., et que vous pouvez spécifier la largeur ou la hauteur comme auto, ce qui signifie que le texte peut circuler librement dans cette direction. ForeignObject agit comme une fenêtre de découpage.
Remarque: alors que l'exemple ci-dessus est un contenu SVG 1.1 valide, dans SVG 2 l'attribut 'requiredFeatures' a été supprimé, ce qui signifie que l'élément 'switch' essaiera de rendre le premier élément 'g' indépendamment de la prise en charge de SVG 1.2 'textArea ' éléments. Voir les spécifications des éléments de commutation SVG2 .
la source
xhtml:div
place dediv
, mais cela pourrait être à cause de d3.js. Je n'ai pas trouvé de référence utile sur TextFlow, existe-t-il (toujours) ou était-ce juste dans un brouillon?Le textPath peut être bon dans certains cas.
la source
En me basant sur le code de @Mike Gledhill, je suis allé plus loin et j'ai ajouté plus de paramètres. Si vous avez un SVG RECT et que vous souhaitez que le texte soit enveloppé à l'intérieur, cela peut être pratique:
la source
boxwidth = parseInt(boxObject.getAttribute('width'))
boxwidth = parseInt(boxObject.getBBox().width)
Cette fonctionnalité peut également être ajoutée à l'aide de JavaScript. Carto.net a un exemple:
http://old.carto.net/papers/svg/textFlow/
Quelque chose d'autre qui pourrait également être utile si vous êtes des zones de texte modifiables:
http://old.carto.net/papers/svg/gui/textbox/
la source
Le code suivant fonctionne correctement. Exécutez l'extrait de code ce qu'il fait.
Peut-être qu'il peut être nettoyé ou le faire fonctionner automatiquement avec toutes les balises de texte en SVG.
la source
J'ai publié la procédure suivante pour ajouter un faux retour à la ligne à un élément "texte" SVG ici:
SVG Word Wrap - Afficher le bouchon?
Il vous suffit d'ajouter une simple fonction JavaScript, qui divise votre chaîne en éléments "tspan" plus courts. Voici un exemple de ce à quoi il ressemble:
J'espère que cela t'aides !
la source