GSAPカードアニメーション実装ガイド|フリップ&スタック2パターン【CSS+JS】


WebサイトやアプリのUIに「くるっ」とした動きが加わるだけで、体験は一気にリッチになります。
今回は、JavaScriptアニメーションライブラリ GSAP(GreenSock Animation Platform)を使って、カードアニメーションの2つのパターン──「フリップ(回転)」と「スタック(積み重ね)」を構築する方法をご紹介します。

名刺のようなカードがクリックに反応して回転したり、山積みのカードが1枚ずつめくられたり──
そんなインタラクティブなUI演出が、GSAPとCSSだけで実装可能です。


この記事で紹介する内容

  • カード要素がくるっと回転して切り替わるフリップ演出
  • 複数カードが山積みで順番にめくられるスタック演出
  • 前後のカードを入れ替えながらアニメーションする方法
  • 回転軸と方向(transform-origin)の指定方法
  • ダークモードや立体感を取り入れた今風デザイン
  • クリックボタンで「次へ」「前へ」の切り替えを実装

コードはCodePenにて動作確認できます。


パターン1:カードフリップ(回転アニメーション)

デモ(CodePen)

See the Pen
Untitled
by masakazuimai (@masakazuimai)
on CodePen.


回転アニメーションでUIに「躍動感」を

カードフリップは、名刺サイズのカードがY軸またはX軸を中心に回転することで、次のカードが「めくられる」ように登場する演出です。

カードそのものが回転して切り替わることで、よりダイレクトでダイナミックな印象を与えることができます。

UI構成と動きの考え方

UIの構造は以下のようにシンプルです。

  • .card-holder:カード全体を包む領域。perspective を加えて立体的に
  • .card:背景画像付きのカード要素。複数重ねて表示
  • 「次へ」「前へ」ボタンで順番切り替え

アニメーションの流れ(次のカード)

  1. 手前のカードが X軸に90度 回転して消える
  2. DOMの最後に移動して裏側でリセット
  3. 回転角 -90度 → 0度 に戻して再登場

前のカードに戻すとき

  1. 最後尾のカードを先頭に移動
  2. 初期状態で 90度 回転させておく
  3. 0度 まで回転して表示

GSAPの .to().set() を活用することで、「視覚的には回転しながら切り替わっている」ように見せつつ、実際にはDOMを入れ替えて再利用しているのがポイントです。


回転の起点は「transform-origin」で指定する

カードの回転は、transform-origin の設定で表現が大きく変わります。

  • center bottom:下辺を支点に上に向かって回転(めくる感じ)
  • center top:上辺を支点に下に倒れるような回転
  • center center:中心からぐるりと回る回転(回転ドア風)

今回は名刺風のカードを「上にめくる」ように演出したかったため、
center bottom → 回転 → center top という切り替えを採用しています。


パターン2:カードスタック(積み重ねアニメーション)

デモ(CodePen)

See the Pen
Untitled
by masakazuimai (@masakazuimai)
on CodePen.


カードスタックの特徴

「GSAP Stack Cards」は、複数のカードが山積み(stack)されており、それが順番にめくられるようなUIアニメーションです。

  • 名刺サイズの画像カードをスタック表示
  • 「次へ」「前へ」ボタンで順番を切り替え
  • カードは下方向に沈みながらフェードアウト
  • DOM操作でカードの順番を入れ替え、次のカードを手前に表示
  • ダークモードに調和するスタイリッシュな見た目

動きの仕組み

「次のカード」を押すと、手前のカードが下へ沈むようにスライドし、サイズが縮小、同時にフェードアウトします。
そのカードはDOM内で最後尾に回され、次のカードが前面に表示されます。

逆に「前のカード」では、最後尾にいたカードを先頭に持ってきて、上から現れるように表示します。
これにより、ユーザーがまるで実際にカードをめくっているような体験が得られます。

UI構成の考え方

親要素である「カードホルダー」の中に複数の .card 要素(画像背景の名刺風ブロック)を入れ、ボタンで前後の入れ替えを制御しています。

入れ替えの操作自体は非常に軽量で、appendChild(後ろへ)や insertBefore(前に戻す)といったDOM操作をGSAPのアニメーションと組み合わせることで、スムーズな体験を実現しています。


2パターンの比較

項目カードフリップカードスタック
動きの特徴X軸/Y軸で回転して切り替え下方向にスライド+フェードアウト
視覚的な印象ダイナミック・立体的スムーズ・シネマティック
DOM操作appendChild + rotationXappendChild + translateY + scale
向いている用途プロフィール・名刺・商品詳細ギャラリー・スライドショー・実績一覧

なぜGSAPを使うのか?

CSSでもtransform: rotateX()は使えますが、GSAPを使うメリットは圧倒的です。

  • イージングやタイミングの制御が簡単
  • 複数ステップのアニメーションが連続で記述できる
  • onCompleteイベントでDOM操作と連携しやすい
  • rotationX, rotationY などのプロパティが明確に扱える

GSAPは「回転」や「位置変更」などのトランスフォーム系アニメーションに極めて強く、柔軟に拡張しやすいのが特長です。HTML/CSS/GSAPのみで構成されており、VueやReactなどのフレームワークを使わずとも、モダンで洗練されたUIが実装可能です。


ダークモード対応デザイン

今回のデモは以下のデザイン要素を意識して調整しています:

要素スタイル
背景色#121212ベースのダークモード仕様
カードサイズフリップ: 640px × 400px / スタック: 300px × 480px
背景画像picsum.photos のランダム画像
ボタングラデーションと影で立体感のあるモダンな配色
影と立体感box-shadow, perspective, backface-visibility を活用

背景色とコントラストのある画像カードが浮き上がるように見えるデザインで、今風でモダンなWeb UIに仕上がっています。


応用・拡張アイデア

これらのカードアニメーションは、カスタマイズ次第でさまざまな場面に活用できます。

表裏の切り替え(名刺裏表)

カードの裏面に transform: rotateX(180deg) を指定し、表面と裏面を front / back クラスで切り替えると、フリップアニメーションになります。
「プロフィール表示」「連絡先情報」「商品詳細」などに最適です。

スワイプ操作の追加

GSAPの Draggable プラグインを使えば、マウスドラッグやタッチ操作でカードをスワイプしてめくることも可能です。
スマホ対応を視野に入れるなら、UX向上につながる重要な要素です。

タイムライン管理と自動再生

複数のアニメーションを連続して発火させるなら、gsap.timeline() を使うと管理がしやすくなります。
また、setInterval を使って自動でカードを切り替えることで、スライドショー的な表現にも応用できます。画像ギャラリーやバナー演出に適しています。


実務や学習にどう活かせるか?

このアニメーションは、ポートフォリオやUI演出に非常に有効です。

たとえば以下のような場面で使えます:

  • 制作実績のビジュアル一覧
  • サービス紹介のフェードスライド
  • EC商品の立体風ギャラリー
  • 採用ページのメンバーカード

また、CSSとJavaScriptの連携、GSAPのタイムライン制御、DOMの再配置処理など、実務的なコードの書き方を学ぶ教材としても適しています


まとめ|GSAP × カードアニメーションでUIをアップグレード

今回紹介した「カードフリップ」と「カードスタック」は、GSAPとCSSを使って比較的シンプルな構成で実装できます。

  • フリップ:X軸回転で「めくる」動きを表現。名刺やプロフィールカードに最適
  • スタック:スライド+フェードで「重なったカードをめくる」体験。ギャラリーや実績一覧に最適

GSAPはスムーズなアニメーション表現を得意としており、タイミング制御やDOMとの連携も柔軟です。
ちょっとした見た目の工夫で、ユーザー体験をアップグレードできる強力なツールと言えるでしょう。

まずは今回のサンプルをベースに、自分なりのレイアウトや演出にアレンジしてみてください。