本文へ移動
uiify

Table of contents

ホバー時の拡大とスクロール位置の追跡に対応する、コンパクトな見出しナビゲーション。

ブラウザー
Chrome 123+Firefox 121+Safari 17.5+
ティア
2
圧縮後のサイズ
4.14 kB
強制レイアウトの上限
0 ms
axe の上限
0
SSR 対応
はい
公開された契約
テストハーネス

プレイグラウンド

Overview

A table of contents gives readers a quick map of a long page. Follow a heading to jump directly to its section, or keep reading and let the current position update as you scroll.

Installation

Import the client entry to enable scroll tracking and pointer interaction. The native button and heading links are already usable before the page finishes loading.

Configuration

Match every line and link to a unique heading ID. Choose a scroll container and a content boundary when the article lives inside another page.

Examples

Hover a line to see its heading in the contents list. Click the line to jump there. On a touch screen, open the list and select the heading you want to read.

Accessibility

The contents are ordinary navigation links. Use the keyboard to open the list, move through its headings, and dismiss it with Escape. Scrolling never moves keyboard focus.

Styling

Adjust line length, spacing and the panel width with CSS variables. The current section uses bolder text; the heading under the pointer gets a separate hover background.

Conclusion

The same component works beside a document or inside a reader. Its compact rail stays available while the article scrolls, without taking a separate content column.

API

TableOfContents.Root (/client)

Prop型既定値説明
scrollSpybooleantrueハイドレーション後、同一ページ内の対象をドキュメント順に追跡します。
scrollTargetstring—スクロール可能な要素のID。省略すると所属するwindowを追跡します。IDが見つからなくてもフォールバックしません。
contentTargetstring—コンテンツ要素のID。対象の探索範囲を制限し、記事の終端を決めます。
offsetnumber0現在の見出しの選択に使う、スクロールビューポートの始端からのピクセル数。
valuestring | null—制御される現在の対象ID。nullで選択を解除します。
defaultValuestring | nullnull現在の対象IDの初期値。
onValueChange(value: string | null) => void—フォーカスを動かさずに、スクロール位置の追跡による変更を通知します。
openboolean—制御されるポップオーバーの状態。
defaultOpenbooleanfalseハイドレーション後に適用する初期開閉状態。
onOpenChange(open: boolean) => void—ホバー、実行、ネイティブの終了要求を通知します。
openOnHoverbooleantrueマウスホバーで開きます。タッチではネイティブのボタンを使います。
openDelaynumber100マウスホバーで開くまでの遅延(ミリ秒)。
closeDelaynumber200トリガーとリストの間を移動する猶予時間。
renderReactElement | ((props, state) => ReactElement)—動作とアクセシビリティの接続を維持したまま、描画する要素を置き換えます。

TableOfContents.Trigger

Prop型既定値説明
target*string—ネイティブのpopovertargetで接続する、一意のContent ID。
aria-labelstring—トリガーに装飾用のレールしか含まれない場合に必須の、アクセシブルな名前。

TableOfContents.Indicator

Prop型既定値説明
value*string—Linkのフラグメントに一致する対象ID。各セクションにインジケーターを1つ使います。
level1 | 2 | 3 | 4 | 5 | 62--uiify-toc-levelから参照できる見出しの階層。
selectedbooleanfalseサーバーエントリーの選択状態。クライアントはRoot.valueから選択を導出します。
renderReactElement | ((props, state) => ReactElement)—動作とアクセシビリティの接続を維持したまま、描画する要素を置き換えます。

TableOfContents.Content

Prop型既定値説明
id*string—Trigger.targetに一致する、一意のポップオーバーID。
side"top" | "right" | "bottom" | "left""left"ネイティブのCSSアンカーの辺。必要に応じて配置を反転します。
align"start" | "center" | "end""start"トリガーの横での配置。
renderReactElement | ((props, state) => ReactElement)—動作とアクセシビリティの接続を維持したまま、描画する要素を置き換えます。

TableOfContents.Link

TableOfContents.Rail / List

Prop型既定値説明
renderReactElement | ((props, state) => ReactElement)—動作とアクセシビリティの接続を維持したまま、描画する要素を置き換えます。

キーボード

キー操作
Enter / Spaceトリガーから、ネイティブの目次ポップオーバーを開閉
Tab / Shift+Tab通常の見出しリンク間を移動
Escapeポップオーバーを閉じ、リストからトリガーへフォーカスを戻す

アクセシビリティ

ナビゲーションランドマークと、アイコンのみのトリガーにラベルを付けてください。サーバーエントリーでは、ハイドレーション前からネイティブのポップオーバーの開閉とフラグメントリンクが動作します。/clientエントリーは、ホバー、クリックによる固定、拡大、スクロール位置の追跡を追加します。現在のリンクはaria-current=locationを公開し、装飾用インジケーターは支援技術から隠します。スクロール位置の追跡は、フォーカスを移動したりスクロールを読み上げたりしません。動きを減らす設定では、任意のスキンが線のトランジションを無効にします。

スタイリングのフック

data-uiify-table-of-contentsdata-partdata-selecteddata-highlighteddata-statedata-sidedata-aligndata-positioning--uiify-toc-line-size--uiify-toc-line-max-size--uiify-toc-line-thickness--uiify-toc-row-size--uiify-toc-magnify-radius--uiify-toc-indent--uiify-toc-panel-size--uiify-toc-duration--uiify-toc-level--uiify-toc-index--uiify-toc-pointer
このページは機械翻訳によるもので、レビューは未実施です。