SVG 1.2. Крошечное добавление переноса текста, но большинство реализаций SVG, которые вы найдете в браузере (за исключением Opera), не реализовали эту функцию.Как правило, вам, разработчику, нужно размещать текст вручную.
Спецификация SVG 1.1 дает хороший обзор этого ограничения и возможных решений для его преодоления:
Каждый элемент 'text' приводит к отображению одной строки текста.SVG не выполняет автоматического разрыва строки или переноса слов.Чтобы добиться эффекта нескольких строк текста, используйте один из следующих методов:
- Авторский или авторский пакет должен предварительно рассчитать разрывы строк и использовать несколько текстовых элементов (по одному для каждогострока текста).
- Авторский или авторский пакет должен предварительно вычислить разрывы строк и использовать один элемент 'text' с одним или несколькими дочерними элементами '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, которая позволяет вам делать подобные вещи и работает в веб-браузерах, хотя я еще не выпустил ее.