Accordion
A set of collapsible panels with headings.
View as MarkdownAnatomy
Import the component and assemble its parts:
import { Accordion } from '@base-ui-components/react/accordion';
<Accordion.Root>
<Accordion.Item>
<Accordion.Header>
<Accordion.Trigger />
</Accordion.Header>
<Accordion.Panel />
</Accordion.Item>
</Accordion.Root>API reference
Root
Groups all parts of the accordion.
Renders a <div> element.
defaultValueany[]
- Name
- Description
The uncontrolled value of the item(s) that should be initially expanded.
To render a controlled accordion, use the
valueprop instead.- Type
any[] | undefined
valueany[]
- Name
- Description
The controlled value of the item(s) that should be expanded.
To render an uncontrolled accordion, use the
defaultValueprop instead.- Type
any[] | undefined
onValueChangefunction
- Name
- Description
Event handler called when an accordion item is expanded or collapsed. Provides the new value as an argument.
- Type
| (( value: any[], eventDetails: Accordion.Root.ChangeEventDetails, ) => void) | undefined
- Name
- Description
Allows the browser’s built-in page search to find and expand the panel contents.
Overrides the
keepMountedprop and useshidden="until-found"to hide the element without removing it from the DOM.- Type
boolean | undefined- Default
false
openMultipleboolean(default: true)
- Name
- Description
Whether multiple items can be open at the same time.
- Type
boolean | undefined- Default
true
disabledboolean(default: false)
- Name
- Description
Whether the component should ignore user interaction.
- Type
boolean | undefined- Default
false
loopboolean(default: 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
orientationOrientation(default: 'vertical')
- Name
- Description
The visual orientation of the accordion. Controls whether roving focus uses left/right or up/down arrow keys.
- Type
'horizontal' | 'vertical' | undefined- Default
'vertical'
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: Accordion.Root.State) => string)
keepMountedboolean(default: false)
- Name
- Description
Whether to keep the element in the DOM while the panel is closed. This prop is ignored when
hiddenUntilFoundis used.- Type
boolean | undefined- Default
false
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: Accordion.Root.State, ) => ReactElement)
data-orientation
data-disabled
Item
Groups an accordion header with the corresponding panel.
Renders a <div> element.
valueAccordionItemValue
- Name
- Type
AccordionItemValue
onOpenChangefunction
- Name
- Description
Event handler called when the panel is opened or closed.
- Type
((open: boolean) => void) | undefined
disabledboolean(default: false)
- Name
- Description
Whether the component should ignore user interaction.
- Type
boolean | undefined- Default
false
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: Accordion.Item.State) => string)
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: Accordion.Item.State, ) => ReactElement)
data-open
data-disabled
data-index
Header
A heading that labels the corresponding panel.
Renders an <h3> element.
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: Accordion.Item.State) => string)
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: Accordion.Item.State, ) => ReactElement)
data-open
data-disabled
data-index
Trigger
A button that opens and closes the corresponding panel.
Renders a <button> element.
nativeButtonboolean(default: 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
- Name
- Description
CSS class applied to the element, or a function that returns a class based on the component’s state.
- Type
string | ((state: Accordion.Item.State) => string)
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: Accordion.Item.State, ) => ReactElement)
data-panel-open
data-disabled
Panel
A collapsible panel with the accordion item contents.
Renders a <div> element.
- Name
- Description
Allows the browser’s built-in page search to find and expand the panel contents.
Overrides the
keepMountedprop and useshidden="until-found"to hide the element without removing it from the DOM.- Type
boolean | undefined- Default
false
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: Accordion.Item.State) => string)
keepMountedboolean(default: false)
- Name
- Description
Whether to keep the element in the DOM while the panel is closed. This prop is ignored when
hiddenUntilFoundis used.- Type
boolean | undefined- Default
false
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: Accordion.Item.State, ) => ReactElement)