Adobe Illustrator

Работа с векторной графикой в браузере значительно упрощается при использовании готовых SVG-файлов, созданных в графических редакторах. Одним из наиболее удобных инструментов для подготовки таких файлов является Adobe Illustrator. Правильный экспорт и структура SVG напрямую влияют на то, насколько удобно будет управлять элементами через Snap.svg.


Подготовка SVG в Adobe Illustrator

Структура документа

Перед экспортом важно правильно организовать документ:

  • Каждый логический элемент должен быть отдельным объектом
  • Использование слоёв (Layers) и групп (Groups) облегчает дальнейшую работу
  • Имена объектов должны быть осмысленными (например: button, icon_play, background)

Snap.svg позволяет обращаться к элементам через CSS-селекторы, поэтому корректные имена существенно ускоряют разработку.


Присвоение идентификаторов

Illustrator позволяет задать ID каждому объекту:

  1. Открыть панель Layers
  2. Дважды кликнуть по элементу
  3. Задать понятное имя

После экспорта это имя станет значением атрибута id в SVG:

<rect id="button" x="10" y="10" width="100" height="50" />

В Snap.svg:

var button = Snap.select("#button");

Группировка элементов

Группы (<g>) позволяют управлять несколькими объектами как единым целым:

<g id="icon">
    <circle cx="50" cy="50" r="40" />
    <polygon points="40,30 70,50 40,70" />
</g>

В Snap.svg:

var icon = Snap.select("#icon");
icon.attr({ opacity: 0.5 });

Экспорт SVG из Illustrator

Основные параметры экспорта

При сохранении файла (File → Export → Export As → SVG) важно обратить внимание на настройки:

  • Styling: Presentation Attributes (чтобы стили были в атрибутах, а не в CSS)
  • Font: Convert to Outlines (избегает проблем с шрифтами)
  • Images: Embed
  • Object IDs: Layer Names (сохраняет имена, заданные в слоях)

Минимизация лишнего кода

Illustrator часто добавляет избыточные данные:

  • metadata
  • sodipodi или inkscape-подобные атрибуты
  • лишние transform

Рекомендуется:

  • очищать SVG вручную
  • использовать оптимизаторы (например, SVGO)

Импорт SVG в Snap.svg

Встраивание через HTML

<svg id="scene"></svg>
var s = Snap("#scene");

Snap.load("image.svg", function(fragment) {
    s.append(fragment);
});

Прямое использование SVG

Если SVG встроен в HTML:

<svg id="scene">
    <rect id="box" x="10" y="10" width="100" height="100" />
</svg>
var box = Snap.select("#box");
box.attr({ fill: "blue" });

Работа с элементами из Illustrator

Изменение атрибутов

var circle = Snap.select("#circle");

circle.attr({
    fill: "red",
    stroke: "#000",
    strokeWidth: 2
});

Анимация

circle.animate(
    { r: 80 },
    1000,
    mina.easeinout
);

Работа с группами

var group = Snap.select("#group");

group.animate(
    { transform: "translate(100,0)" },
    500
);

Трансформации и координаты

Illustrator часто экспортирует элементы с transform. Это влияет на поведение в Snap.svg.

Пример:

<rect transform="translate(50,50)" />

В Snap.svg:

element.transform("translate(100,0)");

Важно учитывать, что трансформации могут накладываться, а не заменяться.


Оптимизация структуры для Snap.svg

Рекомендации

  • Избегать вложенных трансформаций
  • Упрощать пути (Path)
  • Разбивать сложные объекты на простые части
  • Использовать <g> для логической структуры

Работа с путями (Path)

Illustrator активно использует <path>. Snap.svg позволяет управлять ими:

var path = Snap.select("#line");

path.animate({
    d: "M10 10 L200 200"
}, 1000);

Маски и клиппинг

Illustrator поддерживает:

  • Clipping Mask
  • Opacity Mask

После экспорта:

<clipPath id="clip">
    <circle cx="50" cy="50" r="40" />
</clipPath>

В Snap.svg:

var rect = Snap.select("#rect");
rect.attr({
    clipPath: "url(#clip)"
});

Работа с цветами и стилями

Illustrator может экспортировать стили:

В виде CSS (нежелательно)

<style>
    .cls-1 { fill: red; }
</style>

Или атрибутов (предпочтительно)

<rect fill="red" />

Snap.svg лучше работает с атрибутами:

element.attr({ fill: "green" });

Обработка текста

Текст в Illustrator:

  • Может экспортироваться как <text>
  • Или преобразовываться в кривые (path)

Проблемы:

  • Разные браузеры по-разному отображают шрифты
  • Анимация текста ограничена

Решение:

  • Конвертировать текст в кривые для стабильности
  • Или управлять текстом через Snap.svg:
var text = s.text(50, 50, "Hello");

Интерактивность

Обработка событий

var button = Snap.select("#button");

button.click(function() {
    this.animate({ transform: "scale(1.2)" }, 200);
});

Наведение

button.hover(
    function() {
        this.attr({ fill: "orange" });
    },
    function() {
        this.attr({ fill: "blue" });
    }
);

Практическая схема работы

  1. Создание графики в Illustrator
  2. Разметка слоёв и ID
  3. Экспорт SVG с правильными настройками
  4. Очистка и оптимизация SVG
  5. Импорт в Snap.svg
  6. Добавление интерактивности и анимаций

Частые проблемы

Потеря ID

Причина: неверные настройки экспорта Решение: использовать Layer Names


Лишние transform

Причина: сложные преобразования в Illustrator Решение: упрощать объекты перед экспортом


Некорректное отображение

Причины:

  • неподдерживаемые эффекты (blur, gradient mesh)
  • сложные маски

Решение:

  • использовать базовые SVG-эффекты
  • тестировать в браузере

Расширенные техники

Символы (Symbols)

Illustrator поддерживает символы, но при экспорте они могут превращаться в <use>:

<use xlink:href="#symbol1" />

Snap.svg:

var use = Snap.select("use");

Дублирование элементов

var original = Snap.select("#shape");
var clone = original.clone();

clone.attr({ transform: "translate(100,0)" });

Динамическая подгрузка частей

SVG можно разбивать на модули:

Snap.load("icon.svg", function(f) {
    s.append(f);
});

Итоговые принципы

  • Illustrator — инструмент подготовки, Snap.svg — инструмент управления
  • Чистая структура SVG = удобная работа в коде
  • Идентификаторы и группы — основа взаимодействия
  • Минимизация лишнего кода повышает производительность
  • Простота геометрии облегчает анимацию