Tabs
アクティブなタブへスライドするインジケーターでビューを切り替えます。セグメントコントロールまたはアンダーラインとして使え、あふれたリストはスクロールします。
Overview
Visitors are up 12% this week, mostly from search.
pnpm dlx shadcn@latest add https://hextaui.com/r/tabs.jsonコンポーネント、HextaUIのテーマトークン、依存するHextaUIコンポーネントを追加します。
まだ追加していない場合は、グローバルCSSにテーマトークンを追加してください。
依存関係をインストールします。
pnpm add @base-ui/react class-variance-authority cn次のコードをコピーしてプロジェクトに貼り付けてください。
components/ui/tabs.tsx インポートパスは、お使いのプロジェクト構成に合わせて更新してください。
1つのインジケーターがアクティブなタブへスライドしてそのサイズに合わせ、コンテンツは即座に切り替わるため、頻繁な切り替えがアニメーションを待つことはありません。インジケーターはページのハイドレーション前に配置されるので、読み込み時にジャンプして現れることはありません。
下線
TabsList の variant="line" は、pill の代わりに下線をスライドさせます。
多数のタブ
タブが収まらないときは、リストが横にスクロールし、まだ見えるものがある端をフェードして、アクティブまたはフォーカスされたタブを表示位置までスクロールします。
多数のタブ(セグメント型)
pill スタイルも同じようにスクロールし、選択したタブを表示したまま、トラックを保ちます。
アイコンとカウント
トリガーの内側にアイコンやバッジを置きます。
垂直
orientation="vertical" はタブを縦に積み、下線は側面に移ります。
無効
無効なタブはキーボードでスキップされます。
制御
value と onValueChange を渡します。外部からの変更でもインジケーターがスライドします。
右から左
タブ、矢印キー、インジケーターは文字の読み方向に従います。
| キー | アクション |
|---|---|
| Tab | リスト内のアクティブなタブに移動し、次にパネルへ移動します。 |
| ←→ | タブ間を移動します。端で循環します。縦向きでは ↑ と ↓。 |
| HomeEnd | 最初または最後のタブに移動します。 |
| EnterSpace | フォーカスされているタブを開きます。フォーカスの移動に合わせてタブを開くには、TabsList に activateOnFocus を設定します。 |
- リストは
tablistで、各トリガーは対応するtabpanelを制御するtabです。 - パネルはフォーカス可能なので、リンクやボタンのないコンテンツにもキーボードユーザーが到達できます。
- 視差効果の軽減が有効な場合、インジケーターはスライドせずジャンプします。
| プロパティ | 型 | デフォルト |
|---|---|---|
value | any | – |
defaultValue | any | 0 |
onValueChange | (value, details) => void | – |
orientation | "horizontal" | "vertical" | "horizontal" |
| 属性 | 説明 |
|---|---|
data-activation-direction | "left"、"right"、"up"、"down"。古いタブから見た新しいタブの位置。 |
| プロパティ | 型 | デフォルト |
|---|---|---|
variant | "default" | "line" | "default" |
activateOnFocus | boolean | false |
loopFocus | boolean | true |
| 属性 | 説明 |
|---|---|
data-slot="tabs-indicator" | スライドする pill または下線。 |
data-scrolled-start / data-scrolled-end | リストがその方向にスクロールできるときに付きます。 |
--active-tab-left / --active-tab-width | アクティブなタブの位置とサイズ。-top と -height もあります。 |
| プロパティ | 型 | デフォルト |
|---|---|---|
value | any | – |
disabled | boolean | false |
render | ReactElement | (props, state) => ReactElement | <button> |
| 属性 | 説明 |
|---|---|
data-active | 開いているタブ。 |
data-disabled | そのタブは無効です。 |
| プロパティ | 型 | デフォルト |
|---|---|---|
value | any | – |
keepMounted非表示の間も、パネルを DOM に残します。 | boolean | false |
- Breadcrumb現在のページまでのリンクをたどる経路です。安全に折り返し、右から左へのレイアウトでは反転し、折りたたまれた区間をその場で展開できます。
- Navigation menuドロップダウンつきのサイトナビゲーションです。または、メニュー間でコンテンツがスライドする間も開いたままになる、全幅の1つのパネルにもできます。
- Paginationすべてのボタンを定位置に保つページナビゲーションです。現在のページへ滑らかに移動し、省略記号から任意のページへジャンプできます。
- Sidebarアイコンのみ、またはオフキャンバスに折りたたまれ、ヘッダーの下に固定され、スマートフォンではスワイプできるシートになるアプリのサイドバーです。
使用しているブロック
Tabs の上に構築されるブロック。