SVG 1.2小さなテキストの折り返しが追加されましたが、ブラウザーに表示されるSVGのほとんどの実装(Operaを除く)はこの機能を実装していません。通常、テキストを手動で配置するのは開発者の責任です。
SVG 1.1仕様は、この制限の概要と、それを克服するための可能な解決策を提供します。
各 'text'要素により、テキストの単一の文字列がレンダリングされます。SVGは自動改行やワードラップを行いません。複数行のテキストの効果を得るには、次のいずれかの方法を使用します。
- 著者またはオーサリングパッケージは、改行を事前に計算し、複数の「テキスト」要素(テキストの各行に1つ)を使用する必要があります。
- 著者またはオーサリングパッケージは、改行を事前に計算し、属性「x」、「y」、「dx」、および「dy」に適切な値を持つ1つ以上の「tspan」子要素を持つ単一の「text」要素を使用する必要があります新しい行を開始するキャラクターの新しい開始位置を設定します。(このアプローチにより、ユーザーは複数行のテキストでテキストを選択できます。テキストの選択とクリップボードの操作を参照してください。)
- 「foreignObject」要素内にインラインで埋め込まれたXHTML [XHTML]などの別のXML名前空間でレンダリングされるテキストを表現します。(注:このアプローチの正確なセマンティクスは、現時点では完全には定義されていません。)
http://www.w3.org/TR/SVG11/text.html#Introduction
プリミティブとして、dy
属性とtspan
要素を使用してテキストの折り返しをシミュレートできます。仕様に記載されているように、一部のツールはこれを自動化できます。たとえば、Inkscapeで、目的の形状とテキストを選択し、[テキスト]-> [フレームへのフロー]を使用します。これにより、形状の境界に基づいて折り返すラッピングを使用してテキストを書き込むことができます。また、SVG 1.1との互換性を維持するようにInkscapeに指示するには、以下の手順に従ってください。
ください http //wiki.inkscape.org/wiki/index.php/FAQ#What_about_flowed_text.3F
さらに、テキストの折り返しを動的に自動化するために使用できるJavaScriptライブラリがいくつかあります。
http //www.carto.net/papers/svg/textFlow/
形状をテキスト要素にラップするためのCSVGの解決策(たとえば、「ボタン」の例を参照)に注目することは興味深いですが、それらの実装はブラウザーで使用できないことに言及することが重要です。
http //www.csse.monash.edu .au /〜clm / csvg / about.html
まだリリースしていませんが、同様のことができ、Webブラウザーで機能するCSVGにインスパイアされたライブラリーを開発したので、これについて言及します。