Анимация 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 — локальная установка не требуется.
Все уроки этого курса
- Встроенный SVG, img и object
- Основные фигуры SVG: rect circle path
- viewBox SVG и адаптивное масштабирование
- Анимация SVG с помощью CSS и SMIL