PurpleSchool — курсы программирования онлайн
  • Пути
    • Frontend React разработчик
    • Frontend Vue разработчик
    • Backend разработчик Node.js
    • Fullstack разработчик React / Node.js
    • Mobile разработчик React Native
    • Backend разработчик Golang
    • Devops инженер
    • Backend разработчик Python
  • Подписка
  • AI для кодаНовое
  • О нас
    • Отзывы
    • Реферальная программа
    • О компании
    • Контакты
  • Иконка открытия меню
    • Сообщество
    • PurpleПлюс
    • AI Собеседование
    • AI тренажёр
    • Проекты
PurpleSchool — платформа бесплатных roadmap и курсов для разработчиков
ютуб иконка
Telegram иконка
VK иконка
VK иконка
Курсы
ГлавнаяКаталог курсовFrontendBackendFullstack
Практика
КарьераПроектыPurpleПлюсPurpleMax
Материалы
БлогБаза знаний
Документы
Договор офертаПолитика конфиденциальностиПроверка сертификатаМиграция курсовРеферальная программа
Реквизиты
ИП Ларичев Антон АндреевичИНН 773373765379contact@purpleschool.ru

PurpleSchool © 2020 -2026 Все права защищены

  • Курсы
    • FrontendИконка стрелки
    • AI разработкаИконка стрелки
    • BackendИконка стрелки
    • DevOpsИконка стрелки
    • MobileИконка стрелки
    • ТестированиеИконка стрелки
    • Soft-skillsИконка стрелки
    • ДизайнИконка стрелки
    Иконка слояПерейти в каталог курсов
  • Бесплатно
    • Курсы
    • JavaScript Основы разработкиPython Основы PythonCSS CSS FlexboxКарта развитияВопросы для собеседований
    • База знанийИконка стрелки
    • Новостные рассылкиИконка стрелки
  • PurpleSchool — курсы программирования онлайн
    • Подписка
    • AI для кодаНовое
    • Сообщество
    Главная
    Сообщество
    Анимации в CSS: transition, @keyframes и View Transitions API

    Анимации в CSS: transition, @keyframes и View Transitions API

    Аватар автора Анимации в CSS: transition, @keyframes и View Transitions API

    Антон Ларичев

    Иконка календаря24 марта 2026
    csshtmljavascriptmiddleИконка уровня middle
    Картинка поста Анимации в CSS: transition, @keyframes и View Transitions API

    Введение

    Анимации в CSS давно стали неотъемлемой частью современной веб-разработки. Они позволяют создавать плавные переходы между состояниями элементов, сложные многоэтапные эффекты и даже анимировать переходы между страницами — всё это без единой строчки JavaScript.

    В арсенале CSS-разработчика сегодня три основных инструмента: свойство transition для простых плавных переходов, директива @keyframes в сочетании со свойством animation для сложных многошаговых анимаций, и новый View Transitions API для анимации смены контента на странице. В этой статье разберём каждый из них с практическими примерами и выясним, когда какой подход выбрать.

    CSS transition: плавные переходы между состояниями

    Свойство transition — самый простой способ добавить анимации в CSS. Оно описывает плавный переход элемента из одного состояния в другое, например при наведении курсора.

    .button {
      background-color: #6c3fc5;
      color: white;
      padding: 12px 24px;
      border-radius: 8px;
      /* Плавный переход для фона и трансформации */
      transition: background-color 0.3s ease, transform 0.2s ease;
    }
    
    .button:hover {
      background-color: #8b5cf6;
      transform: translateY(-2px);
    }

    Свойство transition принимает четыре параметра: анимируемое свойство, длительность (duration), функцию плавности (timing-function) и задержку. Можно использовать сокращённую запись или указать каждый параметр отдельно.

    Какие свойства анимировать через transition

    Не все CSS-свойства одинаково хорошо анимируются. Для максимальной производительности анимируйте только transform и opacity — браузер обрабатывает их на GPU, без перерасчёта layout.

    /* Хорошо: анимация transform и opacity */
    .card {
      transition: transform 0.3s ease, opacity 0.3s ease;
    }
    .card:hover {
      transform: scale(1.05);
      opacity: 0.9;
    }
    
    /* Плохо: анимация width вызывает reflow */
    .card-bad {
      transition: width 0.3s ease;
    }
    .card-bad:hover {
      width: 300px;
    }

    Анимация таких свойств как width, height, margin или padding через transition заставляет браузер пересчитывать layout на каждом кадре, что снижает производительность.

    CSS @keyframes и animation: многошаговые анимации

    Когда нужно создать анимацию с несколькими промежуточными состояниями, transition уже недостаточно. Здесь на помощь приходит директива @keyframes вместе со свойством animation.

    В отличие от transition, который работает только между двумя состояниями (A и B), @keyframes позволяет задать произвольное количество ключевых кадров:

    /* Определяем ключевые кадры анимации */
    @keyframes pulse {
      0% {
        transform: scale(1);
        box-shadow: 0 0 0 0 rgba(108, 63, 197, 0.7);
      }
      50% {
        transform: scale(1.05);
        box-shadow: 0 0 0 10px rgba(108, 63, 197, 0);
      }
      100% {
        transform: scale(1);
        box-shadow: 0 0 0 0 rgba(108, 63, 197, 0);
      }
    }
    
    .notification-badge {
      /* Подключаем анимацию */
      animation: pulse 2s ease infinite;
    }

    Как создать анимацию на CSS с помощью @keyframes

    Свойство animation — это сокращённая запись для нескольких параметров:

    .element {
      /* animation: имя | длительность | timing-function | задержка | количество | направление | fill-mode */
      animation: slideIn 0.5s ease-out 0s 1 normal forwards;
    }
    
    @keyframes slideIn {
      from {
        transform: translateX(-100%);
        opacity: 0;
      }
      to {
        transform: translateX(0);
        opacity: 1;
      }
    }

    Ключевые параметры animation:

    • animation-duration — длительность одного цикла
    • animation-timing-function — функция плавности (ease, linear, cubic-bezier())
    • animation-iteration-count — количество повторений (infinite для бесконечной)
    • animation-direction — направление (normal, reverse, alternate)
    • animation-fill-mode — состояние до/после анимации (forwards, backwards, both)

    Пример: анимация загрузки на чистом CSS

    @keyframes spinner {
      0% {
        transform: rotate(0deg);
      }
      100% {
        transform: rotate(360deg);
      }
    }
    
    .loader {
      width: 40px;
      height: 40px;
      border: 3px solid #e2e8f0;
      border-top-color: #6c3fc5;
      border-radius: 50%;
      animation: spinner 0.8s linear infinite;
    }

    Этот спиннер использует только transform: rotate(), что обеспечивает плавную работу даже на слабых устройствах.

    Разница между transition и animation в CSS

    Выбор между transition и animation зависит от задачи:

    Критерийtransitionanimation + @keyframes
    ТриггерТребует события (hover, focus, класс)Может запускаться автоматически
    СостоянияТолько два (начало и конец)Любое количество ключевых кадров
    ПовторениеОднократный переходПоддерживает циклы и infinite
    Управление из JSПроще интегрироватьСложнее контролировать
    СложностьМинимальный кодБольше кода, больше контроля

    Практическое правило: если анимация — это реакция на действие пользователя (наведение, клик, фокус) и переход между двумя состояниями, используйте transition. Для всего остального — @keyframes.

    View Transitions API: анимация смены контента

    View Transitions API — это новый инструмент для создания плавных анимированных переходов при смене содержимого страницы. Он работает как в SPA, так и в MPA, делая снимки старого и нового состояний и анимируя переход между ними.

    Как использовать View Transitions API в SPA

    Для SPA-приложений API вызывается через JavaScript:

    // Запускаем анимацию перехода при обновлении DOM
    document.startViewTransition(() => {
      // Обновляем содержимое страницы
      updateContent();
    });

    Браузер автоматически создаёт кроссфейд между старым и новым состояниями. Но настоящая сила API раскрывается в сочетании с CSS:

    /* Настраиваем анимацию для старого состояния */
    ::view-transition-old(root) {
      animation: fadeOut 0.3s ease forwards;
    }
    
    /* Настраиваем анимацию для нового состояния */
    ::view-transition-new(root) {
      animation: fadeIn 0.3s ease forwards;
    }
    
    @keyframes fadeOut {
      to { opacity: 0; transform: scale(0.95); }
    }
    
    @keyframes fadeIn {
      from { opacity: 0; transform: scale(1.05); }
    }

    Именованные переходы для отдельных элементов

    Можно анимировать конкретные элементы, присвоив им view-transition-name:

    /* Карточка товара на странице каталога */
    .product-card {
      view-transition-name: product-hero;
    }
    
    /* Изображение на странице товара */
    .product-detail-image {
      view-transition-name: product-hero;
    }

    Теперь при переходе между страницами каталога и товара браузер плавно анимирует перемещение изображения из карточки в детальный вид — включая изменение размера и позиции.

    View Transitions для MPA-приложений

    Для многостраничных приложений достаточно добавить CSS-правило на обеих страницах:

    @view-transition {
      navigation: auto;
    }

    Это включает автоматический кроссфейд при навигации между страницами одного origin. Дополнительный JavaScript не нужен.

    Частые ошибки при работе с анимациями в CSS

    Анимация свойств, вызывающих reflow. Анимирование width, height, top, left через transition или @keyframes приводит к пересчёту layout. Используйте transform: translate(), scale() и opacity.

    Отсутствие will-change. Для сложных анимаций подсказка will-change: transform помогает браузеру оптимизировать рендеринг. Но не ставьте will-change на все элементы — это увеличивает расход памяти.

    /* Используйте will-change точечно */
    .animated-element {
      will-change: transform, opacity;
    }

    Забытый prefers-reduced-motion. Часть пользователей включает режим уменьшения анимаций в системных настройках. Уважайте их выбор:

    @media (prefers-reduced-motion: reduce) {
      *, *::before, *::after {
        animation-duration: 0.01ms !important;
        transition-duration: 0.01ms !important;
      }
    }

    Неправильное использование animation-fill-mode. Без forwards элемент после завершения анимации вернётся в исходное состояние. Если нужно сохранить финальный кадр, указывайте animation-fill-mode: forwards.

    Заключение

    Анимации в CSS прошли путь от простых transition-переходов до полноценного View Transitions API. Для плавных реакций на действия пользователя используйте transition, для сложных многошаговых эффектов — @keyframes и animation, а для анимации смены контента и страниц — View Transitions API. Комбинируйте эти инструменты, следите за производительностью через transform и opacity, и не забывайте про prefers-reduced-motion — тогда ваши интерфейсы будут одновременно красивыми и быстрыми.

    Иконка глаза922

    Комментарии

    0
    Бесплатный курс

    Учитесь программировать с AI-агентом — бесплатно

    Курс «AI в обучении: OpenCode и skills»: поставите агента и разберёте с ним любую тему — как эту статью.

    opencode

    >объясни этот код и дай задачу

    ◆Читаю src/server.ts…

    ✓Разбор готов: 4 шага

    ✓Задача → practice/01.md

    • Установка и настройка OpenCode
    • Агент и skills на практике
    • 13 уроков, 3 модуля
    Начать бесплатно

    0 ₽ · доступ сразу после регистрации

    Бесплатные лекции

    Лучшие курсы по теме

    изображение курса

    HTML и CSS

    Антон Ларичев
    AI-тренажерыAI-тренажеры
    Практика в студииПрактика в студии
    Гарантия
    Бонусы
    иконка звёздочки рейтинга4.9
    3 999 ₽ 6 990 ₽
    Подробнее
    изображение курса

    CSS Flexbox

    Антон Ларичев
    Гарантия
    Бонусы
    иконка звёздочки рейтинга4.9
    бесплатно
    Подробнее
    изображение курса

    Основы JavaScript

    Антон Ларичев
    AI-тренажерыAI-тренажеры
    Практика в студииПрактика в студии
    Гарантия
    Бонусы
    иконка звёздочки рейтинга4.8
    3 999 ₽ 6 990 ₽
    Подробнее

    Похожие статьи

    Картинка поста Claude не работает или не открывается: причины и решения
    Иконка аватараАнтон
    Иконка календаря05 ноября 2026
    AnthropicAI-инструментыClaude CodejuniorИконка уровня junior

    Claude не работает или не открывается: причины и решения

    Почему Claude не работает или не открывается: сбой Anthropic, регион, сеть, аккаунт или лимит. Как найти причину по симптому и что делать из России.

    Иконка чипа0
    Иконка глаза182
    Иконка комментариев0
    Картинка поста Как установить Claude на компьютер в России
    Иконка аватараАнтон
    Иконка календаря04 ноября 2026
    AnthropicAI-инструментыClaude CodejuniorИконка уровня junior

    Как установить Claude на компьютер в России

    Как установить Claude Desktop и Claude Code на Windows, macOS и Linux из России: где скачать, почему приложение не работает и как подключиться без VPN.

    Иконка чипа0
    Иконка глаза385
    Иконка комментариев0
    Картинка поста Soft skills для IT-специалиста: зачем они и как развивать
    Иконка аватараАнтон
    Иконка календаря04 ноября 2026
    soft skillsкоммуникациякод-ревью+ 1middleИконка уровня middle

    Soft skills для IT-специалиста: зачем они и как развивать

    Soft skills для IT-специалиста: коммуникация, фидбек и работа в команде — навыки, которые ускоряют карьеру не меньше, чем технический стек.

    Иконка чипа0
    Иконка глаза67
    Иконка комментариев0
    Иконка чипа0