モーション
すべてのコンポーネントがアニメーションに使うイージングカーブ、継続時間、モーション軽減のチェックと、サイズのモーフィングやスライドするハイライト用のフックです。
easeOut
easeInOut
easeSpring
pnpm dlx shadcn@latest add https://hextaui.com/r/motion.jsonユーティリティと、それが依存するすべてをプロジェクトに追加します。
次のコードをコピーしてプロジェクトに貼り付けてください。
lib/motion.ts インポートパスは、お使いのプロジェクト構成に合わせて更新してください。
HextaUI のすべてのコンポーネントは同じ少数のカーブとデュレーションで動くため、ライブラリ全体が1つのものとして感じられます。
- 操作に応える動きにはイーズアウト。登場、展開、クリックに続く要素は速く始まって落ち着くので、インターフェースが即座に反応するように感じられます。
- 短く、途中で中断できる。ほとんどの動きは150〜300msです。元に戻せるものは、最初からやり直すのではなく現在の状態から始まります。
- 視差効果の軽減は、オフスイッチではなく2つ目のデザインです。動きは瞬時の変化や単純なフェードに置き換わり、状態は読み取れる状態に保たれます。
テーマはカーブを Tailwind のイージングユーティリティとして定義し、lib/motion は同じ値を Web Animations API 向けにエクスポートします。
| クラス | 説明 |
|---|---|
ease-out-quint | JS では easeOut。動きのデフォルトです。popover、ハイライト、サイズ変化に使います。 |
ease-out-cubic | ホバーとフォーカス時の色や影の変化向けの、より柔らかいイーズアウト。 |
ease-in-out-quart | JS では easeInOut。誰も直接トリガーしていない、2つの静止状態間の動き向けです。 |
ease-spring | JS では easeSpring。linear() で記述した、わずかにオーバーシュートするスプリングで、トグルのつまみのように着地するものに使います。 |
ease-drawer | 端からスライドインする drawer と sheet 向けの iOS シートカーブ。 |
| duration。 | 説明 |
|---|---|
press: 100 | 押し込まれていく状態。 |
release: 200 | 押した後に戻る動き。 |
hover: 150 | ホバーとフォーカスのフィードバック。 |
enter: 200 | 要素の出現。 |
exit: 150 | 要素の退場。退場は登場より速く、何かを待たせることがありません。 |
morph: 300 | サイズと位置の変化。 |
prefersReducedMotion() は呼び出し時にメディアクエリを読み取ります。システム設定の変更がすぐに反映されるよう、マウント時に一度ではなく、アニメーションの開始時に確認してください。サーバーでは true を返します。
- 要素内のあらゆる DOM の変化(テキスト、子要素、アイコン)がモーフィングを引き起こします。リサイズのような外部からのサイズ変化は引き起こさないので、要素は遅延なくコンテナーに追従します。
- モーフィングの途中で変更があっても、現在のサイズから続行します。実行中は要素に
data-morphingが付くので、オーバーフローのクリップや他のトランジションの一時停止に使えます。 - 要素は本来のサイズのままにしてください。アニメーションさせる軸に固定の幅や高さを指定しないでください。新しいコンテンツが伸びている間にあふれないよう、
overflow-hiddenを追加します。 - コールバック ref を返します。他の ref と組み合わせるには
useMergedRefを使います。
- ハイライトのサイズと位置はインラインスタイルで設定されます。
absolute top-0を指定し、transform、width、height、opacityにトランジションを付けてください。 - このフックは、指定した属性を
MutationObserverで監視するため、Base UI 自身のdata-pressed、data-checked、aria-currentを含め、どこからの状態にも追従します。 data-visibleは何かが一致している間設定されます。data-instantはハイライトが瞬時に移動すべきときに設定されます。初回表示時、リサイズやスクロール時、視差効果の軽減が有効なときです。data-instant:transition-opacityのようにスタイルを付けます。- バーのスケールを考慮して計測するため、まだズームインしている最中の dialog 内でも位置が揃ったままです。
| プロパティ | 型 | デフォルト |
|---|---|---|
axisアニメーションさせる寸法。 | "width" | "height" | – |
enabledアニメーションするかどうか。 | boolean | true |
durationミリ秒。 | number | 300 |
easing任意の CSS イージング。 | string | easeOut |
| プロパティ | 型 | デフォルト |
|---|---|---|
barRef位置指定されたコンテナー。 | RefObject<HTMLElement | null> | – |
highlightRef動かす要素。 | RefObject<HTMLElement | null> | – |
selectorハイライト対象の子要素に一致させます。 | string | – |
attribute変化したときにハイライトを動かす属性。 | string | "data-popup-open" |
| エクスポート | 説明 |
|---|---|
easeOut | cubic-bezier(0.23, 1, 0.32, 1) |
easeInOut | cubic-bezier(0.77, 0, 0.175, 1) |
easeSpring | linear() によるスプリング。 |
duration | press、release、hover、enter、exit、morph。 |
prefersReducedMotion() | 視差効果の軽減が有効かどうか。サーバーでは true です。 |
- Alertステータスやフィードバックを伝えるインラインメッセージです。ニュートラルなサーフェス、色付きのアイコン、滑らかに折りたたまれる閉じる操作を備えています。
- Attachmentアップロード向けのファイルカードと画像カードです。進捗、状態、操作、カード全体のトリガーに対応し、名前は拡張子を保ったまま表示されます。
- Badge色付きのドットを持つステータスラベル、スライドして閉じる削除可能なタグ、新しい値へ回転するカウントです。
- Breadcrumb現在のページまでのリンクをたどる経路です。安全に折り返し、右から左へのレイアウトでは反転し、折りたたまれた区間をその場で展開できます。
- Calendar単一、範囲、複数選択に対応する日付グリッドです。月のスライド、範囲のプレビュー、タッチしやすいサイズの日付セルを備えています。
- Commandインラインまたは⌘Kパレットとして使える、検索可能な操作リストです。ページ、ショートカット、一致箇所のハイライトに対応します。