Back

Добавление анимаций с помощью плагинов Tailwind CSS

Добавление анимаций с помощью плагинов Tailwind CSS

Вы создали чистый UI на Tailwind, но он выглядит статичным. Добавление движения кажется простой задачей — пока вы не уставитесь в пустой tailwind.config.js, размышляя, нужен ли вам плагин, keyframe или что-то совершенно другое. Вот чёткая карта ваших возможностей.

Ключевые моменты

  • Tailwind поставляется с четырьмя встроенными утилитами анимации (animate-spin, animate-ping, animate-pulse, animate-bounce), которые покрывают загрузчики, скелетоны, бейджи и базовые индикаторы внимания.
  • Для анимаций появления/исчезновения, направленных слайдов и эффектов при прокрутке плагины вроде tailwindcss-animate и tailwind-animations заполняют пробелы без необходимости писать кастомный CSS.
  • Tailwind CSS v4 позволяет определять пользовательские анимации напрямую в CSS с помощью @theme, часто устраняя необходимость в плагине.
  • Всегда оборачивайте несущественные анимации в motion-safe:, чтобы учитывать предпочтения пользователей, которые предпочитают уменьшенное движение.

Что Tailwind предоставляет из коробки

Tailwind поставляется с четырьмя утилитами анимации, которые покрывают удивительно большое количество реальных сценариев использования:

  • animate-spin — вращающиеся загрузчики и иконки
  • animate-ping — бейджи уведомлений и радарные эффекты
  • animate-pulse — скелетоны загрузки
  • animate-bounce — индикаторы прокрутки и сигналы привлечения внимания

Для простой обратной связи о состоянии — спиннера загрузки на кнопке отправки, пульсирующего скелетона во время загрузки данных — этих встроенных анимаций Tailwind CSS часто вполне достаточно. Объедините их с утилитами переходов (transition, duration-300, ease-in-out) для состояний hover и focus, и вы сможете покрыть большинство микровзаимодействий без использования плагина. Вы можете изучить все эти утилиты в официальной документации по анимациям Tailwind.

Когда встроенных возможностей достаточно: загрузчики, скелетоны, бейджи и базовые переходы при наведении.

Когда стоит использовать плагин анимаций Tailwind

Встроенный набор имеет ограничения. Он не включает анимации появления/исчезновения, направленные слайды, перевороты или эффекты при прокрутке. Здесь плагины анимаций Tailwind занимают своё место.

tailwindcss-animate

tailwindcss-animate добавляет композируемые утилиты для появления и исчезновения:

<!-- Плавное появление с увеличением при монтировании -->
<div class="animate-in fade-in zoom-in duration-300">...</div>

<!-- Выезд вверх при закрытии -->
<div class="animate-out slide-out-to-top fade-out duration-200">...</div>

Он также предоставляет детальные настройки — delay-150, repeat-infinite, fill-mode-forwards, direction-alternate — которые позволяют настраивать анимации без написания кастомного CSS.

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

tailwind-animations

tailwind-animations использует другой подход: большая библиотека именованных анимаций (animate-fade-in, animate-shake, animate-heartbeat, animate-jelly и многие другие).

<div class="animate-fade-in">
  Блок с плавным появлением
</div>

Плагин также поддерживает утилиты анимации на основе прокрутки с использованием CSS-свойства animation-timeline.

<!-- Появление при прокрутке с использованием CSS View Timeline -->
<div class="timeline-view animate-fade-in-up animate-range-gradual">...</div>

Эти анимации, управляемые прокруткой, опираются на более новые возможности браузеров, такие как animation-timeline, поэтому поддержка браузерами может варьироваться в зависимости от вашей целевой аудитории.

Tailwind CSS v4 и CSS-ориентированный подход

Если вы используете Tailwind CSS v4, рекомендуемый способ добавления пользовательских анимаций — напрямую в вашем CSS с помощью @theme:

@theme {
  --animate-wiggle: wiggle 1s ease-in-out infinite;

  @keyframes wiggle {
    0%, 100% { transform: rotate(-3deg) }
    50% { transform: rotate(3deg) }
  }
}

Это делает animate-wiggle доступным как утилитный класс немедленно — без необходимости в плагине. Для разовых пользовательских анимаций это часто чище, чем установка зависимости.

Примечание о совместимости: Некоторые плагины были созданы для Tailwind v3 и могут не полностью поддерживать CSS-ориентированную архитектуру v4. Всегда проверяйте репозиторий или документацию плагина перед добавлением его в проект v4.

Не забывайте о доступности

Оборачивайте любую несущественную анимацию в motion-safe:, чтобы пользователи, предпочитающие уменьшенное движение, не пострадали:

<svg class="motion-safe:animate-spin ...">...</svg>

Вариант motion-reduce: в Tailwind работает наоборот — применяя стили только когда предпочтительно уменьшенное движение. Используйте оба варианта, чтобы обеспечить комфортный опыт для каждого пользователя.

Выбор подхода

ПотребностьРешение
Загрузчик, скелетон, бейджВстроенные утилиты animate-*
Появление/исчезновение, модалка, уведомлениеtailwindcss-animate
Богатые именованные анимации, эффекты прокруткиtailwind-animations
Разовая пользовательская анимация@theme в CSS (v4) или theme.extend.keyframes (v3)

Заключение

Начните с того, что Tailwind уже предоставляет. Четыре встроенные утилиты анимации и классы переходов обрабатывают большинство повседневных микровзаимодействий. Когда вам нужны последовательности появления/исчезновения, направленные слайды или эффекты при прокрутке, плагин вроде tailwindcss-animate или tailwind-animations может чисто интегрироваться. Если вы используете v4, попробуйте определить пользовательские токены анимации в CSS, прежде чем вообще обращаться к пакету. Какой бы путь вы ни выбрали, не забывайте учитывать медиа-запрос prefers-reduced-motion, чтобы каждый пользователь получил комфортный опыт.

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

Плагин изначально был создан для Tailwind v3 и не получал новых релизов с 2023 года. Совместимость с Tailwind v4 зависит от настройки проекта, поэтому проверьте репозиторий плагина перед использованием его в проекте v4. Многие его анимации также могут быть воссозданы напрямую с использованием директивы @theme в v4.

В Tailwind v4 определите токен пользовательской анимации внутри блока @theme в вашем CSS-файле, используя переменную --animate- и соответствующее правило @keyframes. В v3 расширьте theme.extend.keyframes и theme.extend.animation в вашем tailwind.config.js. Оба подхода делают анимацию доступной как стандартный утилитный класс.

Утилиты переходов, такие как transition, duration и ease, управляют изменениями свойств между двумя состояниями, например при hover или focus. Утилиты анимации, такие как animate-spin, запускают последовательности на основе keyframes, которые могут зацикливаться, воспроизводиться в обратном порядке или один раз. Используйте переходы для простых изменений состояния и анимации для непрерывного или многошагового движения.

CSS-анимации в Tailwind обычно производительны, потому что они выполняются в потоке композитора при анимации transform и opacity. Избегайте анимации свойств макета, таких как width или height. Анимации при прокрутке с использованием CSS-функции animation-timeline также могут быть эффективными, но поддержка браузерами должна быть проверена перед использованием в продакшене.

Gain Debugging Superpowers

Unleash the power of session replay to reproduce bugs, track slowdowns and uncover frustrations in your app. Get complete visibility into your frontend with OpenReplay — the most advanced open-source session replay tool for developers. Check our GitHub repo and join the thousands of developers in our community.

OpenReplay