SVG.js предоставляет мощный и гибкий инструментарий для создания и
управления текстовыми элементами SVG. Текст в SVG создается с помощью
объекта Text, который позволяет добавлять строки,
устанавливать шрифты, размеры, начертания и управлять
позиционированием.
const draw = SVG().addTo('body').size(600, 400);
const text = draw.text('Пример текста');
text.move(50, 50);
Метод text() создаёт элемент <text> в
SVG, а move(x, y) задаёт его позицию.
Шрифт задается с помощью метода font(), который
принимает объект с параметрами:
family — семейство шрифта ('Arial',
'Verdana', 'Times New Roman' и др.).size — размер шрифта (в пикселях или с указанием
единицы измерения).weight — толщина шрифта ('normal',
'bold', числовые значения 100–900).style — стиль шрифта ('normal',
'italic', 'oblique').anchor — выравнивание текста ('start',
'middle', 'end').Пример:
text.font({
family: 'Verdana',
size: 24,
weight: 'bold',
style: 'italic',
anchor: 'middle'
});
Ключевой момент: метод font() позволяет
комбинировать все параметры шрифта в одном объекте, что
упрощает настройку текста.
SVG поддерживает стандартные варианты начертания текста, которые в
SVG.js задаются через свойства weight и
style.
weight)'normal' — стандартная толщина'bold' — полужирное начертание100, 200, …, 900 — градация толщины (100 — очень
тонкий, 900 — очень жирный)text.font({ weight: 300 }); // тонкий текст
text.font({ weight: 700 }); // жирный текст
style)'normal' — обычный текст'italic' — курсив'oblique' — наклонное начертаниеtext.font({ style: 'italic' });
SVG.js позволяет создавать многострочные тексты с помощью метода
text() и символа перевода строки \n:
const multiLineText = draw.text('Первая строка\nВторая строка\nТретья строка');
multiLineText.font({ size: 20, family: 'Arial' });
multiLineText.move(50, 100);
Каждая строка автоматически позиционируется с вертикальным
интервалом, зависящим от высоты шрифта. Для точного контроля можно
использовать метод leading():
multiLineText.leading(1.5); // множитель высоты строки
Цвет текста задается методом fill():
text.fill('#ff0000'); // красный
text.fill({ color: '#00ff00', opacity: 0.7 }); // зеленый с прозрачностью
Метод stroke() позволяет добавить обводку к буквам:
text.stroke({ color: '#0000ff', width: 1 });
Текст можно масштабировать, вращать и смещать с помощью методов
scale(), rotate(),
translate():
text.rotate(45, 100, 50); // поворот на 45° вокруг точки (100, 50)
text.scale(1.5); // увеличение размера на 50%
text.translate(20, 30); // смещение на (20, 30)
Выравнивание текста управляется свойством anchor:
'start' — по левому краю'middle' — по центру'end' — по правому краюtext.font({ anchor: 'end' });
SVG.js поддерживает текст вдоль кривой или линии. Для этого создается
элемент <path> и связывается с текстом методом
textPath():
const path = draw.path('M10 80 C 40 10, 65 10, 95 80');
const curvedText = draw.text('Текст по кривой');
curvedText.path(path).font({ size: 18 });
Ключевой момент: path() внутри текста связывает
текст с кривой, позволяя создавать эффекты, недоступные обычному
<text>.
Методы tspan() и plain() позволяют детально
управлять отдельными символами:
const t = draw.text('').move(50, 150);
t.tspan('Красный').fill('red').font({ weight: 'bold' });
t.tspan(' и ').fill('black');
t.tspan('Синий').fill('blue').font({ style: 'italic' });
tspan() создает отдельные подэлементы
<tspan>, каждый из которых можно стилизовать
независимо.
SVG.js поддерживает подключение веб-шрифтов через CSS. Для этого
достаточно задать family соответствующего шрифта,
подключенного на странице через <link> или
@font-face:
text.font({ family: 'Roboto', size: 22 });
Текстовые элементы можно делать интерактивными, используя события:
text.on('mouseover', () => text.fill('orange'));
text.on('mouseout', () => text.fill('black'));
Это позволяет создавать динамические подписи, подсветку текста и визуальные эффекты при взаимодействии пользователя.
SVG.js объединяет все инструменты для текста в единой цепочке методов, позволяя:
Комбинация font(), fill(),
stroke(), tspan() и методов трансформации
позволяет создавать сложные и настраиваемые текстовые графики в SVG.