コンテンツにスキップ

087. Transitions(基本アニメーション:更新の瞬間に「物語」を添える)

原理:パッと変わるから、フワッと変わるへ

Webの「瞬間移動」を卒業する

これまでのWebの更新は、情報の「瞬間移動」でした。ボタンを押すと、古い情報が消えて新しい情報がパッと現れる。この変化があまりに急だと、ユーザーは「今、何が起きたのか」という思考の断絶を感じてしまいます。

HTMXには、追加・更新・削除の瞬間に、CSSを使って「物語(アニメーション)」を添えるための強力な仕組みが備わっています。 特別なJavaScriptを書く必要はありません。HTMXが適切なタイミングで特定の「名前(CSSクラス)」を付けてくれるので、私たちはCSSで「どう変化するか」を書くだけでいいのです。


実践:更新のプロセスに目印を付ける

1. HTMXが付けてくれる「4つの魔法のクラス」

更新の際、ターゲット要素には以下のクラスが順番に、かつ自動的に付与されます。

  1. htmx-request: 通信中(リクエストを送っている間)に付きます。
  2. htmx-swapping: サーバーから返事が届き、中身を入れ替える「直前」に付きます。
  3. htmx-added: 新しいHTMLが画面に追加された「瞬間」に付きます。
  4. htmx-settling: 配置が終わって、画面に馴染むまでの間に付きます。

2. 削除の時にフワッと消す(htmx-swapping)

「削除」ボタンを押した時、いきなり消えるのではなく、1秒かけて透明になっていく演出の例です。

<style>
  /* 消える瞬間のスタイル */
  .htmx-swapping {
     opacity: 0;
     transition: opacity 1s ease-out;
  }
</style>

<!-- 
  hx-swap="delete swap:1s" : 
  1秒待ってから消す(075.解説)を指定するのがポイント!
-->
<div hx-delete="/api/item/1" hx-swap="delete swap:1s">
    私を消すと、1秒かけて透明になります。
</div>

3. ステップ・バイ・ステップ解説

  1. CSSを書く: .htmx-swapping などの名前を使って、アニメーション(transitionやanimation)を定義します。
  2. 時間を合わせる: hx-swap 属性の中で、swap:1s のように「アニメーションが終わるまでの待ち時間」を指定します。
  3. 体験する: ボタンを押すと、今までパッと消えていた要素が、情緒的に消えゆく様子が確認できます。

比較:静的な更新 vs アニメーションありの更新

静的な更新(デフォルト)

  • メリット: 実装コストがゼロ。
  • デメリット: 変化が唐突で、ユーザーが「何が起きたか」把握しづらい。

アニメーションあり

  • メリット: 「何が消えて、何が増えたか」が直感的に伝わる。高級感が出る。
  • デメリット: CSSを書く手間と、わずかな待ち時間(swap遅延)が発生する。

まとめ:初心者のための「変化」のデザイン

アニメーションは、単なる飾りではありません。ユーザーの脳に情報を整理させるための「補助」の役割を持っています。

  • まずは「フェード(透明度)」から: 複雑な動き(回転や跳ね返り)に挑戦する前に、まずは opacity(不透明度)を 0 から 1 へ、1 から 0 へ変えるだけの練習から始めましょう。それだけで、アプリの質は格段に上がります。
  • 時間の黄金比: アニメーションの時間は 200ms(0.2秒)〜 500ms(0.5秒)くらいが、人間の目にとって最も「速くて心地よい」と感じられます。
  • CSSの再利用: 一度アニメーションのクラスを作っておけば、ページ内のあらゆるHTMXボタンで使い回すことができます。

一瞬の空白に、優しさを。htmx-swappinghtmx-added といったクラスを使いこなして、無機質だった画面更新を、滑らかで心地よい「体験」へと昇華させてください。次の記事では、さらに具体的にCSSを組み合わせて高度な演出を作る「CSS Transitions(088. CSS Transitions)」を深掘りします。