Tabs
To show tabbed content within Markdown files, you can fall back on MDX. Docusaurus provides <Tabs>
components out-of-the-box.
import Tabs from '@theme/Tabs';import TabItem from '@theme/TabItem';
<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>;
And you will get the following:
- Apple
- Orange
- Banana
info
By default, tabs are rendered eagerly, but it is possible to load them lazily by passing the lazy
prop to the Tabs
component.
#
Displaying a default tabSet the defaultValue
prop in the Tabs
component to the label value of your choice to show the matching tab by default.
For example, in the example above, defaultValue="apple"
forces the Apple
tab to be open by default.
If the defaultValue
prop is not provided or refers to an non-existing value, only the tab headings appear until the user clicks on a tab.
#
Syncing tab choicesYou may want choices of the same kind of tabs to sync with each other. For example, you might want to provide different instructions for users on Windows vs users on macOS, and you want to changing all OS-specific instructions tabs in one click. To achieve that, you can give all related tabs the same groupId
prop. Note that doing this will persist the choice in localStorage
and all <Tab>
instances with the same groupId
will update automatically when the value of one of them is changed. Note that groupID
are globally-namespaced.
<Tabs groupId="operating-systems" defaultValue="win" values={[ {label: 'Windows', value: 'win'}, {label: 'macOS', value: 'mac'}, ]}><TabItem value="win">Use Ctrl + C to copy.</TabItem><TabItem value="mac">Use Command + C to copy.</TabItem></Tabs>
<Tabs groupId="operating-systems" defaultValue="win" values={[ {label: 'Windows', value: 'win'}, {label: 'macOS', value: 'mac'}, ]}><TabItem value="win">Use Ctrl + V to paste.</TabItem><TabItem value="mac">Use Command + V to paste.</TabItem></Tabs>
- Windows
- macOS
- Windows
- macOS
For all tab groups that have the same groupId
, the possible values do not need to be the same. If one tab group with chooses an value that does not exist in another tab group with the same groupId
, the tab group with the missing value won't change its tab. You can see that from the following example. Try to select Linux, and the above tab groups doesn't change.
<Tabs groupId="operating-systems" defaultValue="win" values={[ {label: 'Windows', value: 'win'}, {label: 'macOS', value: 'mac'}, {label: 'Linux', value: 'linux'}, ]}> <TabItem value="win">I am Windows.</TabItem> <TabItem value="mac">I am macOS.</TabItem> <TabItem value="linux">I am Linux.</TabItem></Tabs>
- Windows
- macOS
- Linux
Tab choices with different groupId
s will not interfere with each other:
<Tabs groupId="operating-systems" defaultValue="win" values={[ {label: 'Windows', value: 'win'}, {label: 'macOS', value: 'mac'}, ]}><TabItem value="win">Windows in windows.</TabItem><TabItem value="mac">macOS is macOS.</TabItem></Tabs>
<Tabs groupId="non-mac-operating-systems" defaultValue="win" values={[ {label: 'Windows', value: 'win'}, {label: 'Unix', value: 'unix'}, ]}><TabItem value="win">Windows is windows.</TabItem><TabItem value="unix">Unix is unix.</TabItem></Tabs>
- Windows
- macOS
- Windows
- Unix
#
Customizing tabsYou might want to customize the appearance of certain set of tabs. To do that you can pass the string in className
prop and the specified CSS class will be added to the Tabs
component:
import Tabs from '@theme/Tabs';import TabItem from '@theme/TabItem';
<Tabs className="unique-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>;
- Apple
- Orange
- Banana