Баннер мобильный (3) Пройти тест

Как добавить анимацию с помощью CSS

Анимируйте это немедленно!

Разбор

26 января 2026

Поделиться

Скопировано
Как добавить анимацию с помощью CSS

Содержание

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

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

    Почему стоит использовать CSS для анимации

    CSS имеет ряд преимуществ:

    1. CSS-анимации оптимизированы браузером. Это означает, что они могут выполняться на GPU, не нагружая основной поток JavaScript.
    2. Для базовых анимаций достаточно нескольких строк CSS.
    3. Разработчик описывает, как должен выглядеть элемент в начале и конце анимации, а браузер сам заботится о промежуточных состояниях.
    4. Современные браузеры отлично поддерживают CSS-анимации, включая мобильные устройства.

    Однако у CSS-анимаций есть и серьезные ограничения. Прежде всего, такие анимации практически лишены интерактивности: невозможно остановить анимацию в ответ на действие пользователя, изменить ее ход «на лету» или привязать к динамическим данным, например, к положению скролла или скорости жеста.

    Любые попытки добавить логику — условные переходы, паузы, синхронизацию нескольких элементов — требуют вмешательства JavaScript, что сводит на нет идею «чистого CSS». 

    Кроме того, CSS-анимации плохо масштабируются. При росте количества эффектов код становится громоздким, появляются дубли ключевых кадров, а отладка превращается в головоломку. Особенно это заметно, когда один и тот же набор анимаций применяется к разным компонентам с небольшими отличиями. Отсутствие переменных и логических конструкций делает рефакторинг трудоемким. 

    Для чего подходит CSS-анимация

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

    Основные понятия: transition и animation

    В CSS существует два основных способа создания анимаций:

    • Transition — плавное изменение свойств элемента при смене состояния (например, при наведении курсора).
    • Animation — более сложная анимация, управляемая ключевыми кадрами (@keyframes), которая может работать автономно, без взаимодействия пользователя.

    Часть 1: Transition — плавные переходы

    Свойство transition позволяет задать, как и за какое время должно измениться значение CSS-свойства. Оно состоит из четырех компонентов:

    • transition-property — какое свойство анимировать (например, color, transform, opacity);
    • transition-duration — длительность анимации;
    • transition-timing-function — функция времени (например, ease, linear, cubic-bezier);
    • transition-delay — задержка перед началом анимации.

    Пример простого перехода: при наведении курсора фон кнопки плавно меняет цвет с синего на красный за 0.3 секунды.

    .button {
    
      background-color: blue;
    
      transition: background-color 0.3s ease;
    
    }
    
    .button:hover {
    
      background-color: red;
    
    }

    Не все CSS-свойства можно анимировать. Например, нельзя анимировать display: none → display: block. Лучше использовать opacity и visibility вместе с transform для скрытия/показа элементов.

    Часть 2: Animation и @keyframes

    Если вам нужно больше контроля — например, повторяющаяся анимация или движение по сложной траектории — используйте @keyframes.

    Ключевые кадры (@keyframes) определяют, как будет выглядеть элемент в определенные моменты времени. Синтаксис:

    @keyframes slideIn {
    
      from {
    
        transform: translateX(-100%);
    
      }
    
      to {
    
        transform: translateX(0);
    
      }
    
    }

    Или с процентами:

    @keyframes bounce {
    
      0% { transform: translateY(0); }
    
      50% { transform: translateY(-20px); }
    
      100% { transform: translateY(0); }
    
    }

    Чтобы применить анимацию к элементу, используйте свойство animation:

    .box {
    
      animation: bounce 1s infinite;
    
    }

    Здесь:

    • bounce — имя анимации;
    • 1s — длительность одного цикла;
    • infinite — количество повторов (можно указать число, например, 3).

    Полный список параметров animation:

    • animation-name
    • animation-duration
    • animation-timing-function
    • animation-delay
    • animation-iteration-count
    • animation-direction (например, alternate для движения туда-обратно)
    • animation-fill-mode (определяет, как элемент выглядит до и после анимации)
    • animation-play-state (можно приостановить анимацию)

    Практические примеры

    Пример 1: Пульсирующая кнопка

    @keyframes pulse {
    
      0% { transform: scale(1); }
    
      50% { transform: scale(1.1); }
    
      100% { transform: scale(1); }
    
    }
    
    .pulse-button {
    
      animation: pulse 2s infinite;
    
    }

    Пример 2: Появление элемента с затуханием

    .fade-in {
    
      opacity: 0;
    
      animation: fadeIn 1s forwards;
    
    }
    
    @keyframes fadeIn {
    
      to { opacity: 1; }
    
    }

    Свойство forwards в animation-fill-mode гарантирует, что элемент останется в конечном состоянии после завершения анимации.

    Пример 3: Анимация загрузки (spinner)

    .spinner {
    
      width: 40px;
    
      height: 40px;
    
      border: 4px solid #f3f3f3;
    
      border-top: 4px solid #3498db;
    
      border-radius: 50%;
    
      animation: spin 1s linear infinite;
    
    }
    
    @keyframes spin {
    
      0% { transform: rotate(0deg); }
    
      100% { transform: rotate(360deg); }
    
    }

    Советы по производительности

    Хотя CSS-анимации быстрые, важно использовать их правильно:

    1. Анимировать только «дешевые» свойства: transform и opacity — лучший выбор, так как они не вызывают перерисовку макета (layout) или перерисовку пикселей (paint). Избегайте анимации width, height, top, left — они могут вызывать «ререндеринг» всей страницы.
    2. Использовать will-change с осторожностью. Это свойство подсказывает браузеру, что элемент скоро изменится, и он может заранее оптимизировать его отрисовку. Но злоупотребление им может привести к излишнему потреблению памяти.
    .moving-element {
    
      will-change: transform;
    
    }
    1. Тестировать на реальных устройствах. Особенно на мобильных — даже простая анимация может «тормозить» на слабых смартфонах.

    Расширенные возможности: cubic-bezier и шаги

    Функция времени (timing-function) определяет, как скорость анимации меняется во времени. По умолчанию используется ease, но вы можете создать свою кривую с помощью cubic-bezier().

    Например, «пружинящая» анимация:

    .bouncy {
    
      animation: move 1s cubic-bezier(0.68, -0.55, 0.27, 1.55);
    
    }

    Также можно использовать steps(), чтобы создать покадровую анимацию (например, для спрайтов):

    .sprite {
    
      animation: walk 1s steps(8) infinite;
    
    }

    Анимация и доступность

    Не стоит забывать о пользователях, которые предпочитают отключать анимации, например, из-за чувствительности к движению. Уважать их выбор можно с помощью медиа-запроса prefers-reduced-motion:

    @media (prefers-reduced-motion: reduce) {
    
      * {
    
        animation-duration: 0.01ms !important;
    
        animation-iteration-count: 1 !important;
    
        transition-duration: 0.01ms !important;
    
      }
    
    }

    Это улучшает инклюзивность сайта.

    CSS-анимации — главное

    • CSS-анимации — мощный и производительный инструмент для реализации простых визуальных эффектов, таких как плавные переходы, hover-состояния и базовые загрузочные анимации, при этом не нагружая основной поток JavaScript.
    • Основные механизмы CSS-анимаций — transition и keyframes — позволяют легко управлять временем, длительностью и траекторией изменений, особенно при использовании «дешевых» свойств вроде transform и opacity.
    • У CSS-анимаций есть существенные ограничения: они плохо подходят для сложных, интерактивных или динамических сценариев, где требуется реагировать на действия пользователя, синхронизировать элементы или адаптироваться к данным в реальном времени.
    • Производительность и доступность требуют внимания: важно избегать анимации «дорогих» CSS-свойств, тестировать на реальных устройствах и учитывать предпочтения пользователей через медиа-запрос prefers-reduced-motion.
    • Для масштабируемых и сложных анимаций лучше комбинировать CSS с JavaScript или использовать специализированные библиотеки, так как чистый CSS быстро становится неудобным при росте проекта.

    Разбор

    Поделиться

    Скопировано
    0 комментариев
    Комментарии