SVG-анимация: 15 примеров кода для создания живых иллюстраций
Содержание статьи
- Простые примеры анимации для начинающих
- Плавное появление и исчезновение объектов
- Движение фигур по прямой и кривой траектории
- Как анимировать svg: базовые инструменты и подходы
- Анимация через CSS: свойства и триггеры
- Анимация через SMIL: теги animate и animateTransform
- Создание svg анимации: пошаговые сценарии
- Анимация рисования контура (stroke-dasharray)
- Анимация трансформаций: вращение, масштаб и наклон
- Как создать анимированный svg: продвинутые техники
- Анимация цвета, градиентов и заливки
- Интерактивные анимации: реакция на hover и клик
- Готовые примеры и библиотеки для ускорения работы
- Примеры анимации иконок и логотипов
- Популярные JS-библиотеки для сложных сценариев
Простые примеры анимации для начинающих
Чтобы освоить базовые приёмы, достаточно взять несколько простых примеров анимации svg и разобрать их по шагам. Начнём с изменения прозрачности и перемещения фигур — это основа, на которой строятся более сложные сценарии.
- Плавное появление круга при загрузке страницы.
- Движение прямоугольника по горизонтали и обратно.
- Изменение цвета заливки при наведении курсора.
Каждый из этих вариантов реализуется через атрибуты attributeName и values внутри элемента <animate>. Ниже — наглядная таблица с параметрами для первого случая.
| Атрибут | Значение | Эффект |
|---|---|---|
| attributeName | opacity | Управление прозрачностью |
| from | 0 | Стартовая точка |
| to | 1 | Конечное состояние |
| dur | 2s | Длительность цикла |
Попробуйте изменить длительность или добавить задержку через begin — и поведение объекта сразу станет иным. Эксперименты с этими настройками дают быстрое понимание логики работы.
Плавное появление и исчезновение объектов
Прозрачность — один из самых простых способов оживить картинку. Управляя атрибутом opacity внутри CSS-правил или через SMIL, можно добиться эффекта растворения без рывков. Например, задав начальное значение 0 и плавно увеличивая до 1 за пару секунд, вы получите мягкое проявление. Обратный процесс — постепенное затухание — часто используют для смены состояний в интерфейсе. Ниже показан типовой цикл:
- старт: непрозрачность 0;
- середина: рост до 100%;
- финал: спад обратно к нулю.
Такая механика не перегружает сцену и хорошо сочетается с трансформациями положения.
Движение фигур по прямой и кривой траектории
Перемещение объектов вдоль заданного пути — базовая, но очень expressive возможность. Прямолинейное движение задаётся простым изменением координат, а вот для плавных изгибов удобнее использовать элемент <animateMotion> с описанием пути в атрибуте path. Это позволяет объекту повторять форму кривой, например, окружности или сплайна.
Для наглядности можно сравнить подходы:
- Линейное смещение — меняются атрибуты
xиyу прямоугольника или круга. - Движение по дуге — задаётся команда
M(move to) иC(curve) внутриpath.
Такой метод часто применяется для имитации полёта, езды или течения.
Как анимировать svg: базовые инструменты и подходы
Разобраться, как анимировать svg, проще, чем кажется. Достаточно освоить три основных механизма: CSS-переходы, SMIL и JavaScript-библиотеки. Первый вариант подходит для простых эффектов при наведении, второй — для последовательных сценариев, третий — для сложной интерактивной графики.
Для старта достаточно текстового редактора и браузера. Ниже — краткая сравнительная таблица подходов.
| Метод | Сложность | Типичные задачи |
|---|---|---|
| CSS | Низкая | Смена цвета, поворот, масштаб |
| SMIL | Средняя | Движение по пути, рисование линий |
| JS (GSAP, Snap.svg) | Высокая | Сложные цепочки, управление скроллом |
Начинающим советуют начать с CSS — он интуитивно понятен и не требует подключения внешних файлов.
Анимация через CSS: свойства и триггеры
Каскадные таблицы стилей открывают широкий простор для оживления векторной графики без единой строчки скриптов. Управление движением строится на паре ключевых свойств: transition для плавных переходов между состояниями и @keyframes для создания многошаговых сценариев. Триггером чаще всего выступает псевдокласс :hover, но сработать могут и другие события — фокус, клик или даже появление элемента во вьюпорте.
Например, чтобы кружок менял цвет при наведении, достаточно задать базовый стиль и правило для :hover с указанием длительности перехода. Для более сложной истории — скажем, бесконечного вращения шестерёнки — понадобится анимация с ключевыми кадрами и параметром infinite.
transform— отвечает за перемещение, масштабирование и наклон;opacity— регулирует прозрачность, создавая эффект появления или исчезновения;stroke-dasharrayиstroke-dashoffset— позволяют «рисовать» линии, имитируя рукописный ввод.
Такой подход удобен тем, что вся логика хранится в одном файле стилей, а производительность остаётся высокой — браузер оптимизирует перерисовку.
Анимация через SMIL: теги animate и animateTransform
Синхронизированная мультимедийная интеграция (SMIL) позволяет оживлять векторные изображения без единой строчки JavaScript. Внутри SVG-разметки достаточно вложить пару служебных элементов, чтобы объект начал двигаться.
Базовый тег animate отвечает за плавное изменение какого-либо атрибута: координат, цвета заливки, прозрачности. Его старший брат animateTransform управляет геометрическими трансформациями — вращением, масштабированием, наклоном и смещением.
Ключевые параметры обоих тегов:
attributeName— указывает, какое свойство меняется;fromиto— задают начальное и конечное значения;dur— длительность цикла;repeatCount— число повторов (можноindefinite).
Такой подход работает во всех современных браузерах и не требует внешних библиотек, что делает его удобным для простых интерактивных элементов на странице.
Создание svg анимации: пошаговые сценарии
Начать создание svg анимации проще всего с простого скрипта на JavaScript. Возьмём базовый цикл: меняем атрибут элемента через requestAnimationFrame. Например, плавное перемещение круга по горизонтали занимает около десяти строк кода.
- Определите элемент через
getElementById. - Задайте стартовую позицию и скорость.
- Внутри функции обновления изменяйте координату
cx. - Остановите цикл по достижению границы.
Такой подход даёт полный контроль над каждым кадром. Для более сложных сценариев удобнее использовать SMIL — встроенный механизм разметки, не требующий внешних библиотек.
Анимация рисования контура (stroke-dasharray)
Эффект «прорисовывающейся» линии достигается за счёт управления штриховкой. Свойство stroke-dasharray задаёт длину штриха и промежутка, а stroke-dashoffset смещает начало узора. Плавно уменьшая смещение до нуля, вы заставляете линию «вырастать» из точки.
Базовый алгоритм:
- Установите dasharray равным длине пути (например, 1000).
- Задайте dashoffset тоже 1000 — штрих полностью скрыт.
- Анимируйте offset до 0 — контур проявится.
Такой приём часто применяют для логотипов, иконок и декоративных рамок. Для сложных кривых длину лучше вычислять скриптом через getTotalLength().
Анимация трансформаций: вращение, масштаб и наклон
Манипуляции с геометрией объекта — базовая механика, оживляющая статичную картинку. Вместо перерисовки координат каждой точки движок пересчитывает матрицу преобразований, что экономит ресурсы браузера.
- Вращение задаётся через
rotate(угол, центр_x, центр_y)— точка опоры по умолчанию находится в начале координат (0,0), что часто сбивает с толку новичков. - Масштабирование
scale(kx, ky)растягивает или сжимает элемент относительно оси X и Y. При отрицательных значениях происходит зеркальное отражение. - Наклон (или сдвиг)
skewX(угол)иskewY(угол)деформирует фигуру, превращая прямоугольник в параллелограмм.
Комбинируя эти операции в одном атрибуте transform, получают сложные траектории. Например, вращение вокруг собственного центра достигается предварительным смещением translate, а затем поворотом. Для плавности переходов используют CSS-свойство transition с указанием длительности и функции времени, либо SMIL-теги <animateTransform>, которые не требуют внешних стилей и работают даже в офлайн-режиме.
Как создать анимированный svg: продвинутые техники
Разобраться, как создать анимированный svg, проще через практические примеры. Базовый путь — встроить <animate> внутрь элемента. Но для сложных сценариев этого мало.
Продвинутый подход — комбинировать несколько методов:
- CSS-переходы для hover-эффектов (смена цвета, прозрачности).
- SMIL для бесконечных циклов, когда нужно синхронизировать движение нескольких фигур.
- JavaScript-библиотеки (GSAP, Snap.svg) для управления таймлайном и физикой.
Обратите внимание: SMIL проще для автономных файлов, а CSS даёт больше контроля при интеграции с вёрсткой. Выбор зависит от задачи.
Анимация цвета, градиентов и заливки
Плавное перетекание оттенков оживляет интерфейсы сильнее, чем движение объектов. Для смены цвета используют CSS-свойство fill в связке с transition — достаточно задать начальное и конечное значение, браузер сам рассчитает промежуточные кадры. С градиентами сложнее: линейные и радиальные переходы анимируются только через SMIL или JavaScript, поскольку CSS не умеет интерполировать сложные структуры. На практике удобно менять угол наклона или позицию остановок цвета.
Пример простого перелива:
<circle r="40">
<animate attributeName="fill" values="#3498db;#e74c3c;#2ecc71;#3498db" dur="6s" repeatCount="indefinite"/>
</circle>
Для заливки узоров или текстур лучше использовать pattern — его содержимое тоже поддается трансформации, но требует осторожности с производительностью на слабых устройствах.
Интерактивные анимации: реакция на hover и клик
Наведение курсора способно оживить интерфейс без единой строчки JavaScript. Достаточно прописать в CSS правило :hover для нужного элемента. Например, кнопка может плавно менять заливку, а иконка — слегка увеличиваться в масштабе. С кликом всё чуть сложнее: здесь уже потребуется обработчик событий, который переключает CSS-класс или управляет состоянием через Web Animations API. Такой подход даёт мгновенный отклик на действие пользователя.
- Смена цвета и прозрачности при наведении — базовый приём для кнопок и ссылок.
- Трансформация формы: скругление углов, поворот, деформация контура.
- Появление скрытых деталей: подсказок, дополнительных иконок, вложенных меню.
Для клика часто используют анимацию «нажатия»: объект слегка сжимается, а затем возвращается в исходное состояние. Это создаёт тактильное ощущение физического взаимодействия с плоским изображением.
Готовые примеры и библиотеки для ускорения работы
Когда нет времени писать код с нуля, выручают готовые решения. Например, библиотека Snap.svg упрощает работу с векторной графикой, а GSAP позволяет создавать плавные сцены с минимальными усилиями. Для вдохновения полезно изучить коллекции на CodePen — там сотни рабочих вариантов.
- Vivus — для анимации прорисовки линий.
- Lottie — рендеринг JSON-анимаций из After Effects.
- Mo.js — для эффектных переходов и искажений.
Эти инструменты экономят часы ручной работы и подходят как новичкам, так и опытным разработчикам.
Примеры анимации иконок и логотипов
Оживление графических символов превращает статичный брендбук в интерактивную историю. Например, уведомление-колокольчик может покачиваться при наведении, а стрелка загрузки — вращаться вокруг своей оси. Для логотипов часто используют эффект «рисования» контура: штрих постепенно прорисовывается слева направо, создавая эффект рукописного начертания. Такой приём добавляет узнаваемости и запоминается лучше плоской картинки.
Популярные сценарии для интерфейсов:
- смена цвета или градиента при клике;
- плавное появление с масштабированием;
- вибрация или «дрожание» при ошибке ввода;
- трансформация одной пиктограммы в другую (например, меню-бургер в крестик).
Главное — не перегружать: длительность цикла обычно держат в пределах 0,3–0,8 секунды, иначе интерфейс начинает раздражать.
Популярные JS-библиотеки для сложных сценариев
Когда встроенных возможностей SVG недостаточно, на помощь приходят JavaScript-фреймворки. Они берут на себя управление временем, координатами и взаимодействием с пользователем.
- GSAP — лидер по производительности. Позволяет анимировать атрибуты фигур, кривые Безье и последовательности действий. Незаменим для создания интерактивных инфографиков.
- Snap.svg — потомок легендарного Raphaël. Удобен для работы с группами объектов и трансформациями. Хорошо документирован, хотя проект развивается медленно.
- Anime.js — лёгкий инструмент (около 17 КБ). Поддерживает таймлайны и синхронизацию с прокруткой страницы. Подходит для микровзаимодействий.
- D3.js — не просто анимация, а полноценная работа с данными. С его помощью строят сложные диаграммы, где движение элементов привязано к числовым значениям.
Выбор конкретного решения зависит от задачи: для простого «оживления» иконок хватит CSS, а для игровых механик или визуализации больших массивов данных стоит присмотреться к перечисленным выше библиотекам.
