SVG 1.2 Tiny добавил перенос текста, но большинство реализаций SVG, которые вы найдете в браузере (за исключением Opera), не реализовали эту функцию. Как правило, вам, разработчику, нужно размещать текст вручную.
Спецификация SVG 1.1 предоставляет хороший обзор этого ограничения и возможные решения для его преодоления:
Каждый текстовый элемент вызывает визуализацию одной строки текста. SVG не выполняет автоматического разрыва строки или переноса слов. Чтобы добиться эффекта нескольких строк текста, используйте один из следующих методов:
- Автору или авторскому пакету необходимо предварительно рассчитать разрывы строк и использовать несколько текстовых элементов (по одному на каждую строку текста).
- Авторский или авторский пакет должен предварительно рассчитать разрывы строк и использовать один текстовый элемент с одним или несколькими дочерними элементами «tspan» с соответствующими значениями для атрибутов «x», «y», «dx» и «dy» установить новые стартовые позиции для тех персонажей, которые начинают новые строки. (Этот подход позволяет пользователю выбирать текст из нескольких строк текста - см. Выбор текста и операции с буфером обмена.)
- Выразите текст, который будет отображаться в другом пространстве имен XML, например, в XHTML [XHTML], встроенном в элементе foreignObject. (Примечание: точная семантика этого подхода не полностью определена в настоящее время.)
http://www.w3.org/TR/SVG11/text.html#Introduction
В качестве примитива обтекание текстом может быть смоделировано с использованием dy
атрибута и tspan
элементов, и, как указано в спецификации, некоторые инструменты могут автоматизировать это. Например, в Inkscape выберите нужную фигуру и текст, который вам нужен, и используйте «Текст» -> «Переместить в рамку». Это позволит вам написать текст с переносом, который будет переноситься на основе границ фигуры. Кроме того, обязательно следуйте этим инструкциям, чтобы сообщить Inkscape о совместимости с SVG 1.1:
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
Я упоминаю об этом, потому что я разработал библиотеку в стиле CSVG, которая позволяет вам делать подобные вещи и работает в веб-браузерах, хотя я еще не выпустил ее.