SVG.js предоставляет гибкий и мощный механизм управления размерами графических элементов. Размеры элементов могут задаваться и изменяться динамически с помощью методов библиотеки, обеспечивая точное позиционирование и масштабирование.
Размеры элемента задаются через методы size(),
width() и height().
Примеры использования:
let draw = SVG().addTo('body').size(800, 600);
let rect = draw.rect(200, 100); // ширина 200, высота 100
rect.width(150); // изменение ширины
rect.height(80); // изменение высоты
rect.size(300, 120); // установка новых размеров сразу для ширины и высоты
Особенности методов:
width(value) и height(value) могут
принимать числа (пиксели) или строки с указанием единицы
('50%', '10em').size(width, height) — устанавливает одновременно ширину
и высоту, что удобно при изменении пропорций элемента.Для масштабирования SVG.js использует метод scale(),
который работает относительно текущего размера элемента:
let circle = draw.circle(100);
circle.scale(2); // увеличивает радиус в два раза
circle.scale(0.5); // уменьшает радиус вдвое
Важно: scale() изменяет визуальный
размер элемента без изменения его атрибутов width и
height. Для постоянного изменения размеров лучше
использовать size().
viewBox и preserveAspectRatioЭти атрибуты управляют поведением масштабирования всего контейнера SVG:
let svg = draw.svg('<svg viewBox="0 0 400 400"></svg>');
svg.viewbox(0, 0, 400, 400); // задает видимую область
svg.attr('preserveAspectRatio', 'xMidYMid meet'); // сохранение пропорций при масштабировании
viewBox(x, y, width, height) определяет координаты и
размеры области отображения.preserveAspectRatio контролирует, как содержимое
масштабируется и позиционируется внутри контейнера.SVG.js позволяет указывать размеры в относительных единицах, что особенно полезно для адаптивных интерфейсов:
let rect = draw.rect('50%', '25%');
rect.move('25%', '50%'); // позиционирование также в процентах
Процентные значения рассчитываются относительно родительского
контейнера. Для элементов, вложенных в <g> или другие
группы, процентные размеры применяются относительно ближайшего
SVG-контейнера.
Чтобы сохранить соотношение сторон при изменении размера,
используется метод size() в сочетании с функцией
width() или height():
let rect = draw.rect(200, 100);
let aspect = rect.width() / rect.height();
rect.width(300);
rect.height(300 / aspect); // сохраняем пропорции
Также можно использовать метод bbox() для получения
размеров и координат элемента:
let box = rect.bbox();
console.log(box.width, box.height, box.x, box.y);
Метод bbox() возвращает реальные размеры элемента,
учитывая трансформации и стили.
SVG.js поддерживает анимацию размеров через метод
animate():
rect.animate(1000, '<>').size(400, 200); // плавное изменение ширины и высоты за 1 секунду
'<>',
'>', '<', 'linear').size() в анимации автоматически анимирует как
ширину, так и высоту.Для сложных случаев применяется transform():
rect.transform({ scaleX: 1.5, scaleY: 0.5, origin: 'center' });
scaleX и scaleY задают масштаб по осям X и
Y.origin определяет точку, вокруг которой происходит
трансформация ('top-left', 'center', или
координаты {x, y}).SVG.js управляет размерами текста через метод
font():
let text = draw.text('Пример');
text.font({ size: 24, family: 'Arial', anchor: 'middle' });
size — размер шрифта.anchor — позиция текста относительно координат
(start, middle, end).width(),
height(), size().scale(),
transform({scaleX, scaleY}).viewBox.bbox() и
сохранение соотношения сторон.animate().size().font().Эти методы обеспечивают полную гибкость при создании и изменении SVG-графики, позволяя динамически подстраивать размеры элементов под различные условия отображения.