Я хотел бы отобразить <text>
в SVG то, что будет автоматически переноситься строкой в контейнер так <rect>
же, как текст HTML заполняет <div>
элементы. Как это сделать? Я не хочу размещать строки равномерно, используя <tspan>
s.
108
Вот альтернатива:
Отмечая, что даже если сообщается, что foreignObject поддерживается этой строкой функций, нет никакой гарантии, что HTML может отображаться, потому что это не требуется спецификацией SVG 1.1. На данный момент нет строки функций для поддержки html-in-foreignobject. Тем не менее, он по-прежнему поддерживается во многих браузерах, поэтому, вероятно, он станет необходим в будущем, возможно, с соответствующей строкой функций.
Обратите внимание, что элемент textArea в SVG Tiny 1.2 поддерживает все стандартные функции svg, например расширенное заполнение и т.д., и что вы можете указать ширину или высоту как auto, что означает, что текст может свободно перемещаться в этом направлении. ForeignObject действует как область просмотра отсечения.
Примечание: хотя приведенный выше пример является допустимым содержимым SVG 1.1, в SVG 2 атрибут 'requiredFeatures' был удален, что означает, что элемент 'switch' будет пытаться отобразить первый элемент 'g' независимо от наличия поддержки SVG 1.2 'textArea элементы. См. Спецификацию переключающего элемента SVG2 .
источник
xhtml:div
вместоdiv
, но это могло быть из-за d3.js. Я не нашел полезной ссылки на TextFlow, он (все еще) существует или только в черновике?В некоторых случаях textPath может подойти.
источник
Основываясь на коде @Mike Gledhill, я пошел дальше и добавил больше параметров. Если у вас есть SVG RECT и вы хотите, чтобы текст переносился внутрь него, это может быть удобно:
источник
boxwidth = parseInt(boxObject.getAttribute('width'))
просто принимал бы ширину в пикселях, в то время какboxwidth = parseInt(boxObject.getBBox().width)
принимал бы любые единицы измеренияЭту функциональность также можно добавить с помощью JavaScript. У Carto.net есть пример:
http://old.carto.net/papers/svg/textFlow/
Что-то еще, что также может быть полезно, если вы редактируете текстовые области:
http://old.carto.net/papers/svg/gui/textbox/
источник
Следующий код работает нормально. Запустите фрагмент кода, что он делает.
Может быть, его можно очистить или заставить его автоматически работать со всеми текстовыми тегами в SVG.
источник
Я разместил здесь следующее пошаговое руководство по добавлению ложного переноса слов в «текстовый» элемент SVG:
SVG Word Wrap - Показать пробку?
Вам просто нужно добавить простую функцию JavaScript, которая разбивает вашу строку на более короткие элементы «tspan». Вот пример того, как это выглядит:
Надеюсь это поможет !
источник