SVG (Scalable Vector Graphics) — основной формат для векторной графики в вебе. В отличие от растровых изображений, SVG масштабируется без потери качества, поддерживает стилизацию через CSS и может управляться через JavaScript. Библиотека Snap.svg работает напрямую с SVG-элементами, поэтому корректный экспорт из Figma становится ключевым этапом.
Figma выступает как инструмент проектирования, а Snap.svg — как средство программного управления графикой. Качество и структура SVG-файла напрямую влияют на удобство дальнейшей работы в коде.
Перед экспортом важно правильно структурировать документ:
button-bg,
icon-play, chart-lineid или
class в SVGGroup)select,
selectAll)Текст либо:
Outline Stroke), если важен
точный внешний видSVGExportПример базового SVG:
<svg width="100" height="100" viewBox="0 0 100 100">
<g id="icon-play">
<polygon points="30,20 80,50 30,80" fill="#000"/>
</g>
</svg>
Ключевые элементы:
<svg> — корневой контейнер<g> — группа элементов<path>, <rect>,
<circle> — примитивыfill, stroke,
transformSVG из Figma часто содержит избыточные данные:
transform<g>defsИспользование оптимизаторов (например, SVGO)
Ручная очистка:
Пример до оптимизации:
<g transform="translate(0,0)">
<g>
<path d="..." fill="#000000"/>
</g>
</g>
После:
<path d="..." fill="#000"/>
<svg id="scene"></svg>
Snap.load("image.svg", function(fragment) {
Snap("#scene").append(fragment);
});
После загрузки SVG:
var s = Snap("#scene");
var playButton = s.select("#icon-play");
Изменение атрибутов:
playButton.attr({
fill: "#ff0000"
});
Анимация:
playButton.animate({
transform: "scale(1.2)"
}, 300);
Работа с группами:
var elements = s.selectAll("path");
elements.forEach(function(el) {
el.attr({ stroke: "#000" });
});
idFigma не всегда корректно экспортирует id.
Решение:
id в SVGdata-*pathFigma может создавать чрезмерно сложные пути.
Решение:
viewBox)Иногда SVG имеет смещение или неправильный масштаб.
Решение:
viewBoxviewBox="0 0 width height"
Иконка кнопки с анимацией при наведении.
Шаги в Figma:
btn-bg, btn-iconЭкспорт SVG
Использование в Snap.svg:
var s = Snap("#scene");
Snap.load("button.svg", function(f) {
s.append(f);
var bg = s.select("#btn-bg");
var icon = s.select("#btn-icon");
bg.hover(
function() {
icon.animate({ transform: "scale(1.2)" }, 200);
},
function() {
icon.animate({ transform: "scale(1)" }, 200);
}
);
});
viewBox вместо фиксированных размеровДля повышения эффективности:
Использование плагинов Figma:
Настройка пайплайна сборки:
idГрамотно подготовленный SVG позволяет:
Ошибки на этапе экспорта приводят к усложнению кода, поэтому дисциплина при работе в Figma напрямую влияет на качество реализации в JavaScript.