タブ
Docusaurusは、MDXのおかげで、Markdownで使用できる<Tabs>
コンポーネントを提供しています。
import Tabs from '@theme/Tabs';
import TabItem from '@theme/TabItem';
<Tabs>
<TabItem value="apple" label="Apple" default>
This is an apple 🍎
</TabItem>
<TabItem value="orange" label="Orange">
This is an orange 🍊
</TabItem>
<TabItem value="banana" label="Banana">
This is a banana 🍌
</TabItem>
</Tabs>
- リンゴ
- オレンジ
- バナナ
Tabs
にvalues
とdefaultValue
のプロパティを提供することも可能です。
<Tabs
defaultValue="apple"
values={[
{label: 'Apple', value: 'apple'},
{label: 'Orange', value: 'orange'},
{label: 'Banana', value: 'banana'},
]}>
<TabItem value="apple">This is an apple 🍎</TabItem>
<TabItem value="orange">This is an orange 🍊</TabItem>
<TabItem value="banana">This is a banana 🍌</TabItem>
</Tabs>
- リンゴ
- オレンジ
- バナナ
Tabs
のプロパティは、TabItem
のプロパティよりも優先されます。
<Tabs
defaultValue="apple"
values={[
{label: 'Apple 1', value: 'apple'},
{label: 'Orange 1', value: 'orange'},
{label: 'Banana 1', value: 'banana'},
]}>
<TabItem value="apple" label="Apple 2">
This is an apple 🍎
</TabItem>
<TabItem value="orange" label="Orange 2">
This is an orange 🍊
</TabItem>
<TabItem value="banana" label="Banana 2" default>
This is a banana 🍌
</TabItem>
</Tabs>
- リンゴ 1
- オレンジ 1
- バナナ 1
デフォルトでは、すべてのタブはビルドプロセス中にすぐにレンダリングされ、検索エンジンは非表示のタブをインデックス化できます。
<Tabs lazy />
を使用すると、デフォルトのタブのみをレンダリングできます。
デフォルトのタブの表示
最初のタブがデフォルトで表示されます。この動作をオーバーライドするには、いずれかのタブアイテムにdefault
を追加してデフォルトのタブを指定できます。また、Tabs
コンポーネントのdefaultValue
プロパティを任意のラベル値に設定することもできます。たとえば、上記の例では、value="apple"
タブにdefault
を設定するか、タブにdefaultValue="apple"
を設定すると、「リンゴ」タブがデフォルトで開くようになります。
Tabs
にdefaultValue
が指定されているが、存在しない値を参照している場合、Docusaurusはエラーをスローします。デフォルトでどのタブも表示したくない場合は、defaultValue={null}
を使用します。
タブの選択の同期
同じ種類のタブの選択を互いに同期させたい場合があります。たとえば、WindowsのユーザーとmacOSのユーザーに異なる指示を提供し、1回のクリックでOS固有のすべての指示タブを変更したい場合があります。これを実現するには、関連するすべてのタブに同じgroupId
プロパティを指定できます。これを行うと、選択がlocalStorage
に保持され、同じgroupId
を持つすべての<Tab>
インスタンスは、いずれかの値が変更されると自動的に更新されることに注意してください。グループIDはグローバルに名前空間が設定されていることに注意してください。
<Tabs groupId="operating-systems">
<TabItem value="win" label="Windows">Use Ctrl + C to copy.</TabItem>
<TabItem value="mac" label="macOS">Use Command + C to copy.</TabItem>
</Tabs>
<Tabs groupId="operating-systems">
<TabItem value="win" label="Windows">Use Ctrl + V to paste.</TabItem>
<TabItem value="mac" label="macOS">Use Command + V to paste.</TabItem>
</Tabs>
- Windows
- macOS
- Windows
- macOS
同じgroupId
を持つすべてのタブグループで、可能な値が同じである必要はありません。あるタブグループが、同じgroupId
を持つ別のタブグループに存在しない値を選択した場合、値が欠落しているタブグループはタブを変更しません。次の例から確認できます。Linuxを選択してみてください。上のタブグループは変更されません。
<Tabs groupId="operating-systems">
<TabItem value="win" label="Windows">
I am Windows.
</TabItem>
<TabItem value="mac" label="macOS">
I am macOS.
</TabItem>
<TabItem value="linux" label="Linux">
I am Linux.
</TabItem>
</Tabs>
- Windows
- macOS
- Linux
異なるグループIDを持つタブの選択は、互いに干渉しません
<Tabs groupId="operating-systems">
<TabItem value="win" label="Windows">Windows in windows.</TabItem>
<TabItem value="mac" label="macOS">macOS is macOS.</TabItem>
</Tabs>
<Tabs groupId="non-mac-operating-systems">
<TabItem value="win" label="Windows">Windows is windows.</TabItem>
<TabItem value="unix" label="Unix">Unix is unix.</TabItem>
</Tabs>
- Windows
- macOS
- Windows
- Unix
タブのカスタマイズ
特定のタブセットの外観をカスタマイズしたい場合があります。className
プロパティに文字列を渡すと、指定されたCSSクラスがTabs
コンポーネントに追加されます。
<Tabs className="unique-tabs">
<TabItem value="Apple">This is an apple 🍎</TabItem>
<TabItem value="Orange">This is an orange 🍊</TabItem>
<TabItem value="Banana">This is a banana 🍌</TabItem>
</Tabs>
- リンゴ
- オレンジ
- バナナ
タブ見出しのカスタマイズ
また、attributes
フィールドを使用して、各タブ見出しを個別にカスタマイズすることもできます。追加のプロパティは、Tabs
のvalues
プロパティ、または各TabItem
のプロパティ(label
を宣言する方法と同じ)を介して見出しに渡すことができます。
import styles from './styles.module.css';
<Tabs>
<TabItem value="apple" label="Apple" attributes={{className: styles.red}}>
This is an apple 🍎
</TabItem>
<TabItem value="orange" label="Orange" attributes={{className: styles.orange}}>
This is an orange 🍊
</TabItem>
<TabItem value="banana" label="Banana" attributes={{className: styles.yellow}}>
This is a banana 🍌
</TabItem>
</Tabs>
.red {
color: red;
}
.red[aria-selected='true'] {
border-bottom-color: red;
}
.orange {
color: orange;
}
.orange[aria-selected='true'] {
border-bottom-color: orange;
}
.yellow {
color: yellow;
}
.yellow[aria-selected='true'] {
border-bottom-color: yellow;
}
- リンゴ
- オレンジ
- バナナ
これはリンゴです 🍎
これはオレンジです 🍊
これはバナナです 🍌
className
は、他のデフォルトクラス名とマージされます。CSS属性セレクターと組み合わせて、カスタムdata-value
フィールド({'data-value': 'apple'}
)を使用することもできます。
li[role='tab'][data-value='apple'] {
color: red;
}
クエリ文字列
選択したタブをURL検索パラメーターに保持できます。これにより、事前に選択されたタブを含むページへのリンクを共有できます。たとえば、AndroidアプリからAndroidタブが事前に選択されたドキュメントにリンクできます。この機能はアンカーリンクを提供しません。ブラウザはタブにスクロールしません。
この機能を有効にして、使用する検索パラメーター名を定義するには、queryString
プロパティを使用します。
<Tabs queryString="current-os">
<TabItem value="android" label="Android">
Android
</TabItem>
<TabItem value="ios" label="iOS">
iOS
</TabItem>
</Tabs>
- Android
- iOS
タブがクリックされるとすぐに、URLの末尾に検索パラメーター?current-os=android
または?current-os=ios
が追加されます。
queryString
は、groupId
と一緒に使用できます。
便宜上、queryString
プロパティがtrue
の場合、groupId
の値がフォールバックとして使用されます。
<Tabs groupId="current-os" queryString>
<TabItem value="android" label="Android">
Android
</TabItem>
<TabItem value="ios" label="iOS">
iOS
</TabItem>
</Tabs>
- Android
- iOS
ページが読み込まれると、タブのクエリ文字列の選択が、groupId
の選択(localStorage
を使用)よりも優先して復元されます。