0Pricing
HTML Academy · Урок

Анимация SVG с помощью CSS и SMIL

Добавляйте движение элементам SVG с помощью переходов CSS и SMIL

«Анимация SVG с помощью CSS и SMIL» — бесплатный урок HTML Academy на CoddyKit. Это урок 4 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения HTML Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс HTML Academy содержит 4 уроков всего.

Переходы CSS для SVG

Презентационные атрибуты SVG (fill, stroke, opacity, transform) можно анимировать с помощью переходов CSS. Добавьте класс и задайте переход: .icon { transition: fill 200ms ease; } .icon:hover { fill: red; }. Переходы CSS работают с элементами SVG так же, как и с обычными элементами.

Покадровые анимации CSS для SVG

Применяйте @keyframes к элементам SVG: анимируйте stroke-dashoffset для эффекта прорисовки контура, opacity для плавного появления, а transform — для перемещения и вращения. Тот же синтаксис анимаций, который используется для элементов HTML, применяется к элементам SVG без изменений.

@keyframes draw {
  from { stroke-dashoffset: 100; }
  to { stroke-dashoffset: 0; }
}
.path { stroke-dasharray: 100; animation: draw 1s ease forwards; }

Эффект прорисовки контура

Приём со stroke-dasharray и stroke-dashoffset имитирует прорисовку контура: задайте dasharray равным длине контура, установите dashoffset равным длине контура, чтобы сделать контур невидимым, а затем анимируйте dashoffset до 0. В результате обводка как будто рисуется от начала до конца.

Получение длины контура

path.getTotalLength() возвращает длину контура в пользовательских единицах SVG. Используйте это значение и для stroke-dasharray, и для начального stroke-dashoffset. Благодаря этому анимация корректно работает независимо от сложности и длины контура.

CSS transform для SVG

Современные браузеры поддерживают CSS transform для элементов SVG. В элементах SVG transform-origin по умолчанию указывает на левый верхний угол SVG, а не на центр элемента, как в HTML. Укажите transform-box: fill-box, чтобы сделать transform-origin относительно ограничивающего прямоугольника элемента.

.spinner {
  transform-box: fill-box;
  transform-origin: center;
  animation: rotate 1s linear infinite;
}

Анимации SMIL

SMIL (язык интеграции синхронизированных мультимедиа) — встроенная система анимации SVG. Элемент animate изменяет значения атрибутов с течением времени. SMIL не требует JavaScript или CSS: анимации полностью задаются декларативно внутри разметки SVG.

<circle r="20">
  <animate attributeName="r" from="20" to="40" dur="1s" repeatCount="indefinite"/>
</circle>

animateTransform

<animateTransform attributeName="transform" type="rotate" from="0 50 50" to="360 50 50" dur="2s" repeatCount="indefinite"> вращает элемент вокруг указанной центральной точки с использованием синтаксиса SMIL.

animateMotion

<animateMotion> перемещает элемент вдоль контура SVG. Сошлитесь на контур с помощью mpath или встроенных данных контура. Элемент автоматически следует кривой контура, что удобно для сложных траекторий движения без ручного расчёта координат.

Компромиссы CSS и SMIL

Анимации CSS поддерживаются всеми современными браузерами, интегрированы с каскадом CSS и позволяют проще управлять анимацией через JavaScript (приостанавливать и воспроизводить в обратном направлении). SMIL самодостаточен внутри разметки SVG, работает в статических файлах SVG без доступа к CSS и предоставляет декларативные выразительные средства для анимации вдоль контура.

Морфинг контуров SVG

Чтобы анимировать переход между двумя формами контура, контуры должны содержать одинаковое количество команд и иметь совместимую структуру. Анимация CSS изменяет свойство d (Chrome 88+, Firefox 72+): @keyframes { to { d: path("M...") } } обеспечивает встроенный морфинг контуров средствами CSS.

Доступность анимации SVG

Добавьте медиазапрос prefers-reduced-motion, чтобы отключить или упростить анимации SVG для пользователей, которым движение доставляет дискомфорт. Декоративные анимации следует полностью отключать, а значимые анимации, например состояния загрузки, — упрощать, а не останавливать.

Проверка знаний

Как приём со stroke-dasharray и stroke-dashoffset создаёт анимацию прорисовки контура?

Итоги

В анимации SVG используются переходы и покадровые анимации CSS для эффектов на основе свойств, приём со stroke-dasharray и stroke-dashoffset для прорисовки контуров, а также SMIL animate, animateTransform и animateMotion для декларативной анимации внутри SVG и prefers-reduced-motion для доступности. CSS и SMIL дополняют друг друга: выбирайте подход с учётом того, нужна ли SVG интеграция с каскадом CSS или автономность файла.

Часто задаваемые вопросы

Урок «Анимация SVG с помощью CSS и SMIL» бесплатный?

Да — полный текст урока «Анимация SVG с помощью CSS и SMIL» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс HTML Academy, подпишись на CoddyKit PRO. Курс HTML Academy содержит 4 уроков всего.

Чему я научусь в уроке «Анимация SVG с помощью CSS и SMIL»?

Добавляйте движение элементам SVG с помощью переходов CSS и SMIL Ты практикуешь HTML Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать HTML Academy?

Предыдущий опыт не требуется. HTML Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 4 из 4.

Сколько времени занимает урок «Анимация SVG с помощью CSS и SMIL»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке HTML Academy?

Да. Каждый урок HTML Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

Все уроки этого курса

  1. Встроенный SVG, img и object
  2. Основные фигуры SVG: rect circle path
  3. viewBox SVG и адаптивное масштабирование
  4. Анимация SVG с помощью CSS и SMIL
← Назад к HTML Academy