Accordion

Accordions display a list of high-level options that can expand/collapse to reveal more information.

Source

Import#

import { Accordion } from '@chakra-ui/react'

Usage#

By default, only one item may be expanded and it can only be collapsed again by expanding another.

<Accordion.Root defaultValue={['a']} padding='4'>
<Accordion.Item value='a'>
<h2>
<Accordion.ItemTrigger>
<Span flex='1' textAlign='start'>
Section 1 title
</Span>
<Accordion.ItemIndicator />
</Accordion.ItemTrigger>
</h2>
<Accordion.ItemContent>
<Box pb='4'>
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod
tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim
veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea
commodo consequat.
</Box>
</Accordion.ItemContent>
</Accordion.Item>
<Accordion.Item value='b'>
<h2>
<Accordion.ItemTrigger>
<Span flex='1' textAlign='start'>
Section 2 title
</Span>
<Accordion.ItemIndicator />
</Accordion.ItemTrigger>
</h2>
<Accordion.ItemContent>
<Box pb='4'>
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod
tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim
veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea
commodo consequat.
</Box>
</Accordion.ItemContent>
</Accordion.Item>
</Accordion.Root>

Expand multiple items at once#

Set multiple to true to allow multiple accordion items to be expanded at once.

<Accordion.Root defaultValue={['section-1']} multiple>
{/* ... */}
</Accordion.Root>

Toggle each accordion item#

set collapsible to true to allow each accordion item to be toggled.

<Accordion.Root defaultValue={['section-1']} collapsible>
{/* ... */}
</Accordion.Root>

Styling the expanded state#

When the accordion item is expanded, you can style all the accordion item parts by passing _expanded style prop.

<Accordion.Root defaultValue={['a']} padding='4'>
<Accordion.Item value='a'>
<h2>
<Accordion.ItemTrigger _expanded={{ bg: 'tomato', color: 'white' }}>
{/* ... */}
<Accordion.ItemIndicator _expanded={{ rotate: '90deg' }} />
</Accordion.ItemTrigger>
</h2>
<Accordion.ItemContent _expanded={{ bg: 'green.100' }}>
{/* ... */}
</Accordion.ItemContent>
</Accordion.Item>
</Accordion.Root>

Accessing the internal state#

To access the internal state of each accordion item, use the Accordion.ItemContext with a render prop. The internal state provides open and disabled.

<Accordion.Root multiple padding='4'>
<Accordion.Item>
<h2>
<Accordion.ItemTrigger>
{/* ... */}
<Accordion.ItemContext>
{(itemState) => (itemState.open ? <FiMinus /> : <FiPlus />)}
</Accordion.ItemContext>
</Accordion.ItemTrigger>
</h2>
{/* ... */}
</Accordion.Item>
</Accordion.Root>

Accessibility#

Pressing space or enter when focus is on the accordion panel header will toggle (expand or collapse) the accordion.

Edit this page on GitHub

Proudly made inNigeria by Segun Adebayo

Deployed by â–² Vercel