Skeleton
150ms待ってから表示され、包んだコンテンツと同じサイズになり、何も動かさずにコンテンツをフェードインさせるプレースホルダーです。
pnpm dlx shadcn@latest add https://hextaui.com/r/skeleton.jsonコンポーネント、HextaUIのテーマトークン、依存するHextaUIコンポーネントを追加します。
まだ追加していない場合は、グローバルCSSにテーマトークンを追加してください。
依存関係をインストールします。
pnpm add @base-ui/react class-variance-authority cn tw-animate-css次のコードをコピーしてプロジェクトに貼り付けてください。
components/ui/skeleton.tsx インポートパスは、お使いのプロジェクト構成に合わせて更新してください。
shimmer と pulse は、テーマにある2つのアニメーションを使います。グローバル CSS ファイルに一度だけ追加してください。
スケルトンは、サイズ指定したプレースホルダーとして単独で使うか、loading を渡して実際のコンテンツを囲み、プレースホルダーにそのまったく同じサイズを取らせます。
形
スケルトン単体は空のブロックです。置き換える対象に合わせて、クラスでサイズと角丸を指定します。
アニメーション
animation は、掃引する shimmer、柔らかい pulse、none から選びます。
テキスト
<SkeletonText /> は1行につき1本のバーを描画し、親のフォントサイズと行の高さに従うため、置き換えるテキストと同じ空間を埋めます。最後の行は短くなります。
実際のコンテンツを囲む
loading を指定すると、スケルトンは実際のコンテンツを下に不可視で描画するため、正確なサイズを取り、データが届いてもレイアウトがずれません。loading が false になると、コンテンツがフェードインします。
インライン
文の中にスケルトンを置くには render={<span />} を渡します。テキストのベースラインに揃います。
高速な読み込み
スケルトンは最初の150msは見えず、その後フェードインします。それより早く届いたデータでは、プレースホルダーが一瞬だけ表示されることはありません。
多数の行
同時にマウントされたスケルトンはアニメーションも同時に開始するため、長いリストも1つの読み込み領域として見えます。
右から左
右から左のレイアウトでは、shimmer は右から左に掃引します。
- スケルトン単体は装飾で、支援技術から隠されます。
<SkeletonText />も同様です。 - コンテンツを囲むスケルトンは、読み込み中に
aria-busyを設定します。下にあるコンテンツは支援技術から隠され、読み込まれるまでフォーカスできません。 - スケルトンは何も読み上げません。何を読み込んでいるかを伝える必要がある場合は、表示されるラベルかステータスメッセージを追加してください。
- 視差効果の軽減が有効な場合、スケルトンは shimmer、pulse、フェードなしですぐに表示されます。
描画する要素のすべての属性を受け付けます。
| プロパティ | 型 | デフォルト |
|---|---|---|
animation | "shimmer" | "pulse" | "none" | "shimmer" |
loading設定すると、スケルトンは子要素を囲みます。true ならプレースホルダー、false ならコンテンツを表示します。単独のプレースホルダーにするには省略します。 | boolean | – |
render | ReactElement | (props, state) => ReactElement | <div> |
| 属性 | 説明 |
|---|---|
data-slot="skeleton" | CSS でスケルトンを指定します。 |
data-animation | 使用中のアニメーション。囲んでいたコンテンツが読み込まれると取り除かれます。 |
data-loading | スケルトンがコンテンツを囲んでいるときは "true" または "false"。 |
data-slot="skeleton-content" | 実際のコンテンツを囲みます。読み込み中は不可視で inert です。 |
--skeleton-dir | 1、右から左のレイアウトでは -1。shimmer の方向を設定します。 |
すべての <div> 属性を受け付けます。
| プロパティ | 型 | デフォルト |
|---|---|---|
lines切り捨てられ、1〜50の範囲に保たれます。 | number | 3 |
animation | "shimmer" | "pulse" | "none" | "shimmer" |
| 属性 | 説明 |
|---|---|
data-slot="skeleton-text" | 行を入れるコンテナー。 |
- Alertステータスやフィードバックを伝えるインラインメッセージです。ニュートラルなサーフェス、色付きのアイコン、滑らかに折りたたまれる閉じる操作を備えています。
- Emptyまだ表示するものがない画面のためのプレースホルダーです。アイコン、メッセージ、次の操作を備えています。
- Progressタスクの進み具合を示すバーまたはリングです。更新のたびに滑らかに動き、全体量が不明なときはスライドします。
- SpinnerApple風の目盛りまたは呼吸するリングで表示する読み込みインジケーターです。表示までの待機と、ちらつかない最短表示時間を設定できます。
- Toastきれいに積み重なり、ホバーで展開し、スワイプで消せる短いメッセージです。読み込み中の状態をその場で成功またはエラーに切り替えます。
- Aspect ratioメディアの読み込み前も形を保ち、読み込み中はシマー表示になり、メディアをフェードインさせ、失敗時はフォールバックを表示するボックスです。
使用しているブロック
Skeleton の上に構築されるブロック。
- API keysOpenAIやAnthropicのコンソールのような、AIプロダクトのAPIキーのページです。スコープ付きの権限と有効期限を持つキーを作成し、シークレットは一度だけ表示され、コピーで確認でき、取り消しは元に戻せ、その場で名前を変更でき、猶予期間つきでローテーションでき、キーごとの使用量を確認できます。
- Artifactモデルが作成したものを表示する、AIチャットの横のパネルです。Webページ、SVG、ドキュメント、コードがリアルタイムでストリーミングされ、その後サンドボックス化されたプレビューに切り替わります。比較して復元できるバージョン、サイズを変更できる分割、スマートフォンでのボトムシートを備えています。
- BillingCursor、Claude、Vercelのスタイルによる、AIプロダクト向けのプランと使用量です。モデルごとに分かれ、サイクル終了時を予測してクレジット切れの前に警告する使用量メーター、ドラッグで確認できる日別チャート、メーター上でプレビューできるアラートつきの支出上限、正確な日割り計算によるプラン変更、実際のバリデーションを備えたカードフォーム、PDFでダウンロードできる請求書を備えています。
- SecurityAIプロダクト向けのセッションとセキュリティです。行がアニメーションで消えるサインアウトつきのアクティブなデバイス、リアルタイムの強度メーターつきのパスワード変更、本物のQRコードを使う二要素認証の設定、6桁の確認とダウンロードできるリカバリーコード、WebAuthnによるパスキー、入力による確認が必要なアカウント削除を備えています。