12k
All articles

Tailwind CSS プラグインでアニメーションを追加する

Tailwind CSS のアニメーション追加方法を、組み込みユーティリティからプラグイン、v4 のカスタムキーフレームまで、アクセシビリティを考慮しながら整理する。

OpenReplay Team
OpenReplay Team
Tailwind CSS プラグインでアニメーションを追加する

クリーンな Tailwind UI を構築したものの、静的に感じられる。モーションの追加は簡単なはずなのに、気づけば空の tailwind.config.js を見つめながら、プラグインが必要なのか、キーフレームが必要なのか、それとも全く別のものが必要なのか悩んでいる。ここでは、選択肢を明確に整理します。

重要なポイント

  • Tailwind には4つの組み込みアニメーションユーティリティ(animate-spinanimate-pinganimate-pulseanimate-bounce)が付属しており、ローダー、スケルトン、バッジ、基本的な注意喚起をカバーします。
  • 入退場アニメーション、方向性のあるスライド、スクロールトリガーの表示には、tailwindcss-animatetailwind-animations などのプラグインがカスタム CSS なしでギャップを埋めます。
  • Tailwind CSS v4 では、@theme を使用して CSS 内で直接カスタムアニメーションを定義でき、多くの場合プラグインが不要になります。
  • 必須ではないアニメーションには常に motion-safe: を使用し、モーション軽減を好むユーザーに配慮しましょう。

Tailwind が標準で提供するもの

Tailwind には、驚くほど多くの実用的なユースケースをカバーする4つのアニメーションユーティリティが付属しています:

  • animate-spin — 回転するローダーとアイコン
  • animate-ping — 通知バッジとレーダーエフェクト
  • animate-pulse — スケルトンローディング画面
  • animate-bounce — スクロールインジケーターと注意喚起

シンプルな状態フィードバック(送信ボタンのローディングスピナー、データ取得中のパルススケルトンなど)には、これらの組み込み Tailwind CSS アニメーションで十分なことが多いです。トランジションユーティリティ(transitionduration-300ease-in-out)と組み合わせてホバーやフォーカス状態に使用すれば、プラグインに触れることなくほとんどのマイクロインタラクションをカバーできます。これらすべてのユーティリティは、公式の 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-150repeat-infinitefill-mode-forwardsdirection-alternate といった細かい制御も提供し、カスタム CSS を書かずにアニメーションを調整できます。

ただし、このプラグインは2023年以降新しいリリースがないため、新しい Tailwind バージョンとの互換性はセットアップによって異なる場合があります。一部のモダンな Tailwind v4 スタックでは、代わりにフレームワークの CSS ファーストアーキテクチャに対応した新しいアニメーションパッケージを使用しています。

tailwind-animations

tailwind-animations は異なるアプローチを取ります:名前付きアニメーションの大規模なライブラリ(animate-fade-inanimate-shakeanimate-heartbeatanimate-jelly など多数)を提供します。

<div class="animate-fade-in">
  Fade in box
</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 を使用している場合、カスタムアニメーションを追加する推奨方法は、@theme を使用して CSS 内で直接定義することです:

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

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

これにより、animate-wiggle がユーティリティクラスとして即座に利用可能になります—プラグインは不要です。一度限りのカスタムアニメーションには、依存関係をインストールするよりもこの方法がクリーンなことが多いです。

互換性に関する注意: 一部のプラグインは Tailwind v3 向けに構築されており、v4 の CSS ファーストアーキテクチャを完全にサポートしていない場合があります。v4 プロジェクトに追加する前に、必ずプラグインのリポジトリまたはドキュメントを確認してください。

アクセシビリティを忘れずに

必須ではないアニメーションは motion-safe: でラップし、モーション軽減を好むユーザーに影響を与えないようにしましょう:

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

Tailwind の motion-reduce: バリアントは逆の動作をします—モーション軽減が優先される場合にのみスタイルを適用します。両方を使用して、すべてのユーザーに快適な体験を提供しましょう。

アプローチの選択

ニーズソリューション
ローダー、スケルトン、バッジ組み込み animate-* ユーティリティ
入退場、モーダル、トーストtailwindcss-animate
リッチな名前付きアニメーション、スクロール表示tailwind-animations
一度限りのカスタムアニメーションCSS 内の @theme (v4) または theme.extend.keyframes (v3)

まとめ

Tailwind が既に提供しているものから始めましょう。4つの組み込みアニメーションユーティリティとトランジションクラスは、日常的なマイクロインタラクションのほとんどを処理します。入退場シーケンス、方向性のあるスライド、スクロールトリガーの表示が必要な場合、tailwindcss-animatetailwind-animations などのプラグインをクリーンに組み込めます。v4 を使用している場合は、パッケージに手を伸ばす前に、CSS でカスタムアニメーショントークンを定義してみてください。どの方法を選択する場合でも、prefers-reduced-motion メディアクエリを尊重し、すべてのユーザーに快適な体験を提供することを忘れないでください。

よくある質問

tailwindcss-animate は Tailwind CSS v4 で使用できますか?

このプラグインはもともと Tailwind v3 向けに構築されており、2023年以降新しいリリースがありません。Tailwind v4 との互換性はプロジェクトのセットアップに依存するため、v4 プロジェクトで使用する前にプラグインのリポジトリを確認してください。このプラグインのアニメーションの多くは、v4 の @theme ディレクティブを使用して直接再現することもできます。

プラグインなしで Tailwind にカスタムアニメーションを追加するにはどうすればよいですか?

Tailwind v4 では、CSS ファイル内の @theme ブロック内で --animate- 変数と対応する @keyframes ルールを使用してカスタムアニメーショントークンを定義します。v3 では、tailwind.config.js で theme.extend.keyframes と theme.extend.animation を拡張します。どちらのアプローチでも、アニメーションが標準のユーティリティクラスとして利用可能になります。

Tailwind のトランジションユーティリティとアニメーションユーティリティの違いは何ですか?

transition、duration、ease などのトランジションユーティリティは、ホバーやフォーカスなどの2つの状態間のプロパティ変更を制御します。animate-spin などのアニメーションユーティリティは、ループ、逆再生、または一度だけ再生できるキーフレームベースのシーケンスを実行します。シンプルな状態変更にはトランジションを、連続的または多段階のモーションにはアニメーションを使用してください。

Tailwind のアニメーションはパフォーマンスに影響しますか?

Tailwind の CSS ベースのアニメーションは、transform と opacity をアニメーション化する際にコンポジタースレッドで実行されるため、一般的にパフォーマンスが良好です。width や height などのレイアウトプロパティのアニメーション化は避けてください。CSS の animation-timeline 機能を使用したスクロールトリガーアニメーションも効率的ですが、本番環境で使用する前にブラウザサポートを確認する必要があります。

DevTools for the frontend

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.

Star on GitHub12k

We use cookies to improve your experience. By using our site, you accept cookies.