Description
The Accordion component is a combination of an accessible button (header area) and a content container.
The component is made so you can compose different parts according to your technical needs.
By default the Accordion component will animate the users events, resulting in an ending height of auto
. This way the content is still responsive after the animation has ended.
Accordion provider
Use the Accordion.Provider
to send along accordion properties to all nested accordions.
Accordion groups
There is the Accordion.Provider
and Accordion.Group
. They are technical the same, except that Accordion.Group
will provide automatically an unique group
id, and with that, make all the nested accordions work together and close each other.
Unexpected behavior
NB: Please try to avoid using a group, because it initiates an unexpected behavior accessibility-wise. This is because the user's interaction will trigger an action in another place, out of the current context, something some users may not expect to happen. It is an automated out-of-context UI execution.
Demos
Single Accordion
<Accordion expanded remember_state id="single-accordion" title="Accordion title" > <P>Accordion content</P> </Accordion> <Accordion.Provider top remember_state icon="chevron_down" icon_position="right" > <Accordion id="single-provider-accordion" title="Accordion title"> <P>Accordion content</P> </Accordion> </Accordion.Provider>
Accordion with large title and content
Grouped Accordion
NB: Please have a read on the unexpected behavior thoughts.
<Accordion.Group expanded allow_close_all> <Accordion expanded={false}> <Accordion.Header>Accordion title</Accordion.Header> <Accordion.Content top> <P> Sociis sapien sociosqu vel sollicitudin accumsan laoreet gravida himenaeos nostra mollis volutpat bibendum convallis cum condimentum dictumst blandit rutrum vehicula </P> </Accordion.Content> </Accordion> <Accordion top> <Accordion.Header>Accordion title</Accordion.Header> <Accordion.Content> <P> Nec sit mattis natoque interdum sagittis cubilia nibh nullam etiam </P> </Accordion.Content> </Accordion> </Accordion.Group>
Customized Accordion
<Accordion group="unique-id" left_component={<Icon icon={bell} />}> <Accordion.Header>Accordion title</Accordion.Header> <Accordion.Content> <P> Sociis sapien sociosqu vel sollicitudin accumsan laoreet gravida himenaeos nostra mollis volutpat bibendum convallis cum condimentum dictumst blandit rutrum vehicula </P> </Accordion.Content> </Accordion> <Accordion top expanded={true} group="unique-id"> <Accordion.Header>Accordion title</Accordion.Header> <Accordion.Content> <P> Nec sit mattis natoque interdum sagittis cubilia nibh nullam etiam </P> </Accordion.Content> </Accordion>
Nested Accordions
<Accordion id="nested-accordion" title="Accordion" expanded space> <P space={0}>Content A</P> <Accordion id="nested-accordion-1" title="Accordion nested 1" space> <P space={0}>I'm nested 1</P> </Accordion> <P space={0}>Content B</P> <Accordion id="nested-accordion-2" title="Accordion nested 2" space> <P space={0}>I'm nested 2</P> </Accordion> </Accordion>
Disabled
Accordion can be disabled, though is not exactly defined what the use case is.
<Accordion expanded disabled remember_state title="Disabled (expanded)"> <P>I am expanded, but disabled, so I can't be closed</P> </Accordion> <Accordion.Provider top disabled remember_state icon="chevron_down" icon_position="right" > <Accordion title="Disabled (closed)"> <P>You can't see this text because I am disabled and closed.</P> </Accordion> </Accordion.Provider>
filled
Variant <Accordion expanded title="Accordion title" variant="filled"> <P>Accordion content</P> </Accordion> <Accordion top title="Accordion title" variant="filled"> <P>Accordion content</P> </Accordion>