В библиотеке SVG.js работа с текстом расширяется за
счёт элемента <tspan>, который позволяет управлять
отдельными строками и сегментами текста внутри одного текстового
объекта. <tspan> предоставляет возможность
форматирования, позиционирования и стилизации отдельных частей текста,
сохраняя их внутри общего контейнера <text>.
<tspan>Добавление нового tspan Метод
.tspan() позволяет создавать отдельный сегмент текста
внутри <text>. Он возвращает объект
Tspan, на котором можно применять индивидуальные стили и
атрибуты.
const draw = SVG().addTo('body').size(400, 200);
const text = draw.text('Первая строка');
const tspan = text.tspan('Вторая строка');
Здесь tspan создаёт новую строку внутри текста. По
умолчанию все tspan наследуют стили родительского
<text>.
Управление содержимым tspan Для изменения текста
внутри tspan используется метод .text():
tspan.text('Изменённая строка');Разделение текста на строки Для многострочного текста удобно использовать массив или добавление нескольких tspan:
const lines = ['Первая строка', 'Вторая строка', 'Третья строка'];
const text = draw.text('');
lines.forEach(line => {
text.tspan(line).newLine();
});
Метод .newLine() автоматически сдвигает текущий tspan
вниз, создавая визуальное разделение строк.
<tspan> поддерживает атрибуты x,
y, dx, dy для точного
позиционирования:
x и y задают абсолютные координаты начала
текста.dx и dy добавляют смещение относительно
текущей позиции.text.tspan('Смещение вправо').dx(20);
text.tspan('Смещение вниз').dy(30);
Для нескольких tspan можно комбинировать эти методы, создавая сложные макеты текста.
Каждый tspan можно стилизовать независимо:
text.tspan('Красная строка').fill('#ff0000').font({ size: 20, weight: 'bold' });
text.tspan('Синяя строка').fill('#0000ff').font({ size: 16, style: 'italic' });
fill() задаёт цвет текста.font() управляет размером, начертанием, наклоном и
семейством шрифта.Можно применять CSS-свойства через .attr():
text.tspan('Подчёркнутый текст').attr({ 'text-decoration': 'underline' });
SVG.js позволяет создавать tspan внутри tspan для дополнительного контроля сегментов:
const parent = text.tspan('Родитель: ');
parent.tspan('Вложенный').fill('green').font({ weight: 'bold' });
Вложенные tspan наследуют позицию и стиль родителя, но при этом могут переопределять отдельные свойства.
const lines = ['Строка 1', 'Строка 2', 'Строка 3'];
const text = draw.text('');
lines.forEach((line, index) => {
text.tspan(line).dy(index ? 20 : 0); // dy для всех кроме первой строки
});
text.children()[1].text('Обновлённая строка'); // изменяет вторую строку
text.children()[0].remove(); // удаляет первую строку
const t1 = text.tspan('Первая строка');
const t2 = text.tspan('Вторая строка');
t2.animate(1000).dy(50).loop();
<tspan> в SVG.js.tspan() создаёт отдельный сегмент текста..newLine() сдвигает tspan вниз для
многострочности..dx() и .dy() позволяют задавать
относительные смещения..fill(),
.font() или .attr().children() даёт
гибкость динамического редактирования текста.Эти возможности делают <tspan> мощным инструментом
для построения сложных текстовых макетов в SVG с полной поддержкой
JavaScript и библиотекой SVG.js.