Tabs
A component for toggling between related panels on the same page.
View as MarkdownAnatomy
Import the component and assemble its parts:
import { Tabs } from '@base-ui-components/react/tabs';
<Tabs.Root>
<Tabs.List>
<Tabs.Tab />
<Tabs.Indicator />
</Tabs.List>
<Tabs.Panel />
</Tabs.Root>API reference
Root
Groups the tabs and the corresponding panels.
Renders a <div> element.
defaultValueTabs.Tab.Value
0
defaultValueTabs.Tab.Value
0
- Name
- Description
The default value. Use when the component is not controlled. When the value is
null, no Tab will be selected.- Type
Tabs.Tab.Value- Default
0
valueTabs.Tab.Value
—
valueTabs.Tab.Value
—- Name
- Description
The value of the currently selected
Tab. Use when the component is controlled. When the value isnull, no Tab will be selected.- Type
Tabs.Tab.Value
onValueChangefunction
—
onValueChangefunction
—- Name
- Description
Callback invoked when new value is being set.
- Type
| (( value: Tabs.Tab.Value, eventDetails: { reason: 'none' event: ReasonToEvent cancel: () => void allowPropagation: () => void isCanceled: boolean isPropagationAllowed: boolean trigger: HTMLElement | undefined } & { activationDirection: Tabs.Tab.ActivationDirection }, ) => void) | undefined
orientationTabs.Root.Orientation
'horizontal'
orientationTabs.Root.Orientation
'horizontal'
- Name
- Description
The component orientation (layout flow direction).
- Type
'horizontal' | 'vertical' | undefined- Default
'horizontal'
classNamestring | function
—
classNamestring | function
—- Name
- Description
CSS class applied to the element, or a function that returns a class based on the component’s state.
- Type
string | ((state: Tabs.Root.State) => string)
renderReactElement | function
—
renderReactElement | function
—- Name
- Description
Allows you to replace the component’s HTML element with a different tag, or compose it with another component.
Accepts a
ReactElementor a function that returns the element to render.- Type
| ReactElement | (( props: HTMLProps, state: Tabs.Root.State, ) => ReactElement)
data-orientation
Indicates the orientation of the tabs.
data-activation-direction
Indicates the direction of the activation (based on the previous selected tab).
List
Groups the individual tab buttons.
Renders a <div> element.
activateOnFocusboolean
true
activateOnFocusboolean
true
- Name
- Description
Whether to automatically change the active tab on arrow key focus. Otherwise, tabs will be activated using Enter or Spacebar key press.
- Type
boolean | undefined- Default
true
loopboolean
true
loopboolean
true
- Name
- Description
Whether to loop keyboard focus back to the first item when the end of the list is reached while using the arrow keys.
- Type
boolean | undefined- Default
true
classNamestring | function
—
classNamestring | function
—- Name
- Description
CSS class applied to the element, or a function that returns a class based on the component’s state.
- Type
string | ((state: Tabs.List.State) => string)
renderReactElement | function
—
renderReactElement | function
—- Name
- Description
Allows you to replace the component’s HTML element with a different tag, or compose it with another component.
Accepts a
ReactElementor a function that returns the element to render.- Type
| ReactElement | (( props: HTMLProps, state: Tabs.List.State, ) => ReactElement)
data-orientation
Indicates the orientation of the tabs.
data-activation-direction
Indicates the direction of the activation (based on the previous selected tab).
Tab
An individual interactive tab button that toggles the corresponding panel.
Renders a <button> element.
valueTabs.Tab.Value
—
valueTabs.Tab.Value
—- Name
- Description
The value of the Tab. When not specified, the value is the child position index.
- Type
Tabs.Tab.Value
nativeButtonboolean
true
nativeButtonboolean
true
- Name
- Description
Whether the component renders a native
<button>element when replacing it via therenderprop. Set tofalseif the rendered element is not a button (e.g.<div>).- Type
boolean | undefined- Default
true
classNamestring | function
—
classNamestring | function
—- Name
- Description
CSS class applied to the element, or a function that returns a class based on the component’s state.
- Type
string | ((state: Tabs.Tab.State) => string)
renderReactElement | function
—
renderReactElement | function
—- Name
- Description
Allows you to replace the component’s HTML element with a different tag, or compose it with another component.
Accepts a
ReactElementor a function that returns the element to render.- Type
| ReactElement | (( props: HTMLProps, state: Tabs.Tab.State, ) => ReactElement)
data-selected
Present when the tab is selected.
data-highlighted
Present when the tab is highlighted.
data-orientation
Indicates the orientation of the tabs.
data-disabled
Present when the tab is disabled.
data-activation-direction
Indicates the direction of the activation (based on the previous selected tab).
Indicator
A visual indicator that can be styled to match the position of the currently active tab.
Renders a <span> element.
renderBeforeHydrationboolean
false
renderBeforeHydrationboolean
false
- Description
Whether to render itself before React hydrates. This minimizes the time that the indicator isn’t visible after server-side rendering.
- Type
boolean | undefined- Default
false
classNamestring | function
—
classNamestring | function
—- Name
- Description
CSS class applied to the element, or a function that returns a class based on the component’s state.
- Type
string | ((state: Tabs.Indicator.State) => string)
renderReactElement | function
—
renderReactElement | function
—- Name
- Description
Allows you to replace the component’s HTML element with a different tag, or compose it with another component.
Accepts a
ReactElementor a function that returns the element to render.- Type
| ReactElement | (( props: HTMLProps, state: Tabs.Indicator.State, ) => ReactElement)
data-orientation
Indicates the orientation of the tabs.
data-activation-direction
Indicates the direction of the activation (based on the previous selected tab).
--active-tab-bottom
Indicates the distance on the bottom side from the parent's container if the tab is active.
--active-tab-height
Indicates the width of the tab if it is active.
--active-tab-left
Indicates the distance on the left side from the parent's container if the tab is active.
--active-tab-right
Indicates the distance on the right side from the parent's container if the tab is active.
--active-tab-top
Indicates the distance on the top side from the parent's container if the tab is active.
--active-tab-width
Indicates the width of the tab if it is active.
Panel
A panel displayed when the corresponding tab is active.
Renders a <div> element.
valueTabs.Tab.Value
—
valueTabs.Tab.Value
—- Name
- Description
The value of the TabPanel. It will be shown when the Tab with the corresponding value is selected. If not provided, it will fall back to the index of the panel. It is recommended to explicitly provide it, as it's required for the tab panel to be rendered on the server.
- Type
Tabs.Tab.Value
classNamestring | function
—
classNamestring | function
—- Name
- Description
CSS class applied to the element, or a function that returns a class based on the component’s state.
- Type
string | ((state: Tabs.Panel.State) => string)
keepMountedboolean
false
keepMountedboolean
false
- Name
- Description
Whether to keep the HTML element in the DOM while the panel is hidden.
- Type
boolean | undefined- Default
false
renderReactElement | function
—
renderReactElement | function
—- Name
- Description
Allows you to replace the component’s HTML element with a different tag, or compose it with another component.
Accepts a
ReactElementor a function that returns the element to render.- Type
| ReactElement | (( props: HTMLProps, state: Tabs.Panel.State, ) => ReactElement)
data-orientation
Indicates the orientation of the tabs.
data-activation-direction
Indicates the direction of the activation (based on the previous selected tab).
data-hidden
Present when the panel is hidden.
data-index
Indicates the index of the tab panel.