Tabs
タブ。同じ場所で中身を切り替える
依存は持ちません
素の HTML にタブはありませんが、作るのに要るのはブラウザが持っているものだけです——
button と、フォーカスの移動と、キーボードの操作。
Tab キーで止まるのは選択中のタブだけです
選択中のタブだけが Tab キーの移動先になります。全部が対象だと、 タブの数だけ Tab キーを押すことになります。
並びの中は矢印キーで移ります。Home で先頭、End で末尾。
端では折り返します——端から端へ戻るのに全部通らずに済みます。
矢印キーで移動すると、その場で中身が切り替わります
activation="manual" を渡すと、押して初めて開きます。
| いつ | |
|---|---|
automatic(既定) | 中身がその場にあるとき。開くのに待ちがない |
manual | 中身の読み込みに時間がかかるとき。すぐ開く形だと、矢印キーで通り過ぎるだけで毎回読み込むことになる |
押せないタブは飛ばされます
矢印キーの移動先にもなりません。止まれるのに開けないのは筋が通りません。
名前は利用側が渡します
id から aria-controls と aria-labelledby を作ります。
同じ画面に2つ置くときは別の名前を渡してください。
Tabs が作って配る形にはしていません。利用側が中身を別の場所から指したいときに 名前が分からなくなるためです。
選択していないタブの中身も DOM に置かれます
表示していないだけで、すべてのタブの中身が最初から DOM にあります。 ブラウザのページ内検索で見つかり、印刷にも出ます。
重いコンポーネントを選ばれるまで描きたくない場合は、 中身の側で出し分けてください。 Tabs は出し分けを持ちません。
選択中のタブは、色以外でも見分けられます
下線と文字の濃さで示します。読み上げには aria-selected で伝わります。
色が見分けられない環境でも、どれが選ばれているか分かります。
3つの状態
通常・空・エッジケースの3つは、どのコンポーネントにも必ずあります。
通常default.tsx
通常。矢印キーで移ると、移った先がすぐ開く。
空empty.tsx
空。中身が無いとき。
エッジケースedge.tsx
エッジケース。押せないタブと、押して初めて開く形。
props
Prop
Type
型と説明はコンポーネントのソースから抽出しています。既定値は出していません——cva の defaultVariants は 署名に現れないので、表に出すと「引数のデフォルトが書かれているものだけ」になり、嘘になります。