fluid-design について
fluid-designは、連続した動きを感じられるインターフェースを作るための設計手法です。デザインや開発の担当者に向けて、中断可能な動き、ジェスチャー間の速度継承、入力方法への対応、視差効果を抑える代替案を示します。
主な機能
- 01操作時の移動にスプリングを優先
- 02アニメーションを中断可能にする
- 03ジェスチャー間で速度を維持
- 04入力方法に応じて操作を調整
- 05レイアウトアニメーションで空間を連続
- 06視差効果を抑える代替案を用意
活用シーン
- 01ドラッグ可能で逆操作できる設計
- 02画面遷移後もオブジェクトの連続性を維持
- 03タッチ、マウス、キーボードに操作を適応
- 04視差効果を抑えた設定でも操作を維持
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ kemiljk/ skills --skill fluid-designインストール後、Claude Code で/fluid-designを入力して読み込まれたか確認します。
同梱ファイルreferences/motion-recipes.mdreferences/principles.md
詳細
Fluid Design
インターフェースを、不連続な状態の切り替えではなく、連続する物理システムのように感じられるものにします。
他のスキルとの組み合わせ
- このスキルでは、インタラクションの感触を扱います。
modern-css-htmlでは、その感触を実現できる最もネイティブな実装を扱います。- 挙動を表現できる場合は、CSS/HTML を優先してください。
- 中断、速度の継承、ジェスチャーの連続性、または CSS ではきれいに表現できないスプリング物理が必要な場合は、JavaScript/Motion/SwiftUI を使用してください。
デフォルト設定
- インタラクティブな移動や拡大縮小には、固定時間のイージングよりもスプリングを優先してください。
- ユーザーが開始できるアニメーションは、すべて途中で中断できる必要があります。
- オブジェクトをつかめる場合は、ボタンだけを介する操作よりも直接操作を優先してください。
- ジェスチャーの境界(離す → 落ち着く/閉じる)をまたいで速度を維持してください。
- 同じオブジェクトが存続する状態やルートの変更では、共有される同一性を維持してください。
- 入力方法(マウス、トラックパッド、タッチ、キーボード)に合わせて、インタラクションモデルを適応させてください。
- 空間的な連続性には FLIP、レイアウトアニメーション、または View Transitions を優先してください。レイアウトプロパティを直接アニメーションするのは、コンポーネントとの適合性と実測した描画コストを考慮した場合に限ります。
- 端では段階的に抵抗を加え、境界ではラバーバンド効果を取り入れてください。
- 振り付けの順序を設けてください。操作対象が先導し、周囲がそれに応じ、その後に落ち着きます。
- 操作の手がかりを維持しつつ、より安全な代替手段を用意した、動きを抑えた場合の経路を提供してください。
推奨/非推奨
| 推奨 | 非推奨 |
|---|---|
インタラクティブな動きに type: "spring" を使う | transition: all |
色/不透明度には CSS の transition を使う | 理由やパフォーマンス確認のない高コストなレイアウトアニメーション |
| 動きを抑えた場合は別のレイアウトを使う | アクセシビリティ対策として animation: none !important だけを使う |
| 要素が密集した領域では、速度を考慮したホバー制御を行う | 反応が遅く感じるデバウンス付きホバー、または制御されていないストロボ効果 |
| Transform + opacity | ユーザーが終わるまで待たなければならない、長く固定されたキーフレームシーケンス |
調整の出発点
- UI スプリング:剛性
200–400、減衰20–30、質量0.8–1.2 - レイアウトの再配置:約
200–350ms、または適切に減衰するスプリング - ジェスチャーによる閉じる操作:オフセットのしきい値と速度のしきい値を組み合わせる
- 要素が密集したホバー領域:EMA で平滑化した速度を使い、開始と終了で個別のしきい値を設定する
入力とアクセシビリティ
- デスクトップ+動きを許可:設計に応じてスプリング、たわみ、速度による制御を使います。
- デスクトップ+動きを抑える:階層とコントロールは維持し、空間的な物理表現は、より控えめな不透明度/色/スナップのモデルに置き換えます。
- タッチ:ホバーに依存した発見方法より、ドラッグ/スクロールのメタファーを優先します。
- キーボード:ポインターの精密な操作がなくても、すべてのインタラクティブな領域を操作できるようにします。
レビューチェックリスト
- 動きの途中で、ユーザーは方向を戻したり変えたりできますか?
- 移動距離/速度によって、動きへの応答は変わりますか?
- インタラクションでアニメーションするプロパティは、コンポジターに適したものだけですか?
- 動きを抑えても、同じタスクを実行できますか?
- リスト/グリッドの再配置で、空間的な記憶は保たれますか?
- ホバー要素が密集した領域では、ポインターの高速な移動に対する制御が行われていますか?
- CSS では挙動を表現できないため、JavaScript を使う必要がありますか?
参考資料
- ジェスチャーやトランジションに対応する実装については、Motion recipes を参照してください。
- 連続性の挙動を判断する際は、Principle notes を参照してください。 タスクに必要な参考資料だけを読み込んでください。
コメント
Markdown 対応