087. Transitions(基本アニメーション:更新の瞬間に「物語」を添える)
原理:パッと変わるから、フワッと変わるへ
Webの「瞬間移動」を卒業する
これまでのWebの更新は、情報の「瞬間移動」でした。ボタンを押すと、古い情報が消えて新しい情報がパッと現れる。この変化があまりに急だと、ユーザーは「今、何が起きたのか」という思考の断絶を感じてしまいます。
HTMXには、追加・更新・削除の瞬間に、CSSを使って「物語(アニメーション)」を添えるための強力な仕組みが備わっています。 特別なJavaScriptを書く必要はありません。HTMXが適切なタイミングで特定の「名前(CSSクラス)」を付けてくれるので、私たちはCSSで「どう変化するか」を書くだけでいいのです。
実践:更新のプロセスに目印を付ける
1. HTMXが付けてくれる「4つの魔法のクラス」
更新の際、ターゲット要素には以下のクラスが順番に、かつ自動的に付与されます。
htmx-request: 通信中(リクエストを送っている間)に付きます。htmx-swapping: サーバーから返事が届き、中身を入れ替える「直前」に付きます。htmx-added: 新しいHTMLが画面に追加された「瞬間」に付きます。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. ステップ・バイ・ステップ解説
- CSSを書く:
.htmx-swappingなどの名前を使って、アニメーション(transitionやanimation)を定義します。 - 時間を合わせる:
hx-swap属性の中で、swap:1sのように「アニメーションが終わるまでの待ち時間」を指定します。 - 体験する: ボタンを押すと、今までパッと消えていた要素が、情緒的に消えゆく様子が確認できます。
比較:静的な更新 vs アニメーションありの更新
静的な更新(デフォルト)
- メリット: 実装コストがゼロ。
- デメリット: 変化が唐突で、ユーザーが「何が起きたか」把握しづらい。
アニメーションあり
- メリット: 「何が消えて、何が増えたか」が直感的に伝わる。高級感が出る。
- デメリット: CSSを書く手間と、わずかな待ち時間(swap遅延)が発生する。
まとめ:初心者のための「変化」のデザイン
アニメーションは、単なる飾りではありません。ユーザーの脳に情報を整理させるための「補助」の役割を持っています。
- まずは「フェード(透明度)」から: 複雑な動き(回転や跳ね返り)に挑戦する前に、まずは
opacity(不透明度)を 0 から 1 へ、1 から 0 へ変えるだけの練習から始めましょう。それだけで、アプリの質は格段に上がります。 - 時間の黄金比: アニメーションの時間は
200ms(0.2秒)〜500ms(0.5秒)くらいが、人間の目にとって最も「速くて心地よい」と感じられます。 - CSSの再利用: 一度アニメーションのクラスを作っておけば、ページ内のあらゆるHTMXボタンで使い回すことができます。
一瞬の空白に、優しさを。htmx-swapping や htmx-added といったクラスを使いこなして、無機質だった画面更新を、滑らかで心地よい「体験」へと昇華させてください。次の記事では、さらに具体的にCSSを組み合わせて高度な演出を作る「CSS Transitions(088. CSS Transitions)」を深掘りします。