Accordion allows users to expand and collapse sections of content.
It helps manage large amounts of information in a limited space
by showing only the section headers initially and revealing content on interaction.
Accordion is commonly used for:
FAQ sections: displaying questions as headers with answers revealed on click
Forms: organizing long forms into sections, for example, personal info, shipping, and payment
Menus: nested navigation in sidebars or mobile views
Crisp and refreshing fruit. Apples are known for their versatility and nutritional benefits. They come in a variety of flavors and are great for snacking, baking, or adding to salads.
Naturally sweet and potassium-rich fruit. Bananas are a popular choice for their energy-boosting properties and can be enjoyed as a quick snack, added to smoothies, or used in baking.
Nutrient-packed green vegetable. Broccoli is packed with vitamins, minerals, and fiber. It has a distinct flavor and can be enjoyed steamed, roasted, or added to stir-fries.
Radius
xs
sm
md
lg
xl
Chevron position
Chevron icon size
import { Accordion } from '@mantine/core';
import { data } from './data';
function Demo() {
const items = data.map((item) => (
<Accordion.Item key={item.value} value={item.value}>
<Accordion.Control icon={item.emoji}>{item.value}</Accordion.Control>
<Accordion.Panel>{item.description}</Accordion.Panel>
</Accordion.Item>
));
return (
<Accordion defaultValue="Apples">
{items}
</Accordion>
);
}
Use the chevron prop to change the chevron icon. When chevron is set,
chevronIconSize prop is ignored. To remove the chevron icon, use chevron={null}.
To customize chevron styles, use Styles API with
data-rotate attribute. It is set when the item
is opened if the disableChevronRotation prop is not set.
Example of a custom chevron icon with rotation styles:
Crisp and refreshing fruit. Apples are known for their versatility and nutritional benefits. They come in a variety of flavors and are great for snacking, baking, or adding to salads.
Naturally sweet and potassium-rich fruit. Bananas are a popular choice for their energy-boosting properties and can be enjoyed as a quick snack, added to smoothies, or used in baking.
Nutrient-packed green vegetable. Broccoli is packed with vitamins, minerals, and fiber. It has a distinct flavor and can be enjoyed steamed, roasted, or added to stir-fries.
import { IconPlus } from '@tabler/icons-react';
import { Accordion } from '@mantine/core';
import { data } from './data';
import classes from './Demo.module.css';
function Demo() {
const items = data.map((item) => (
<Accordion.Item key={item.value} value={item.value}>
<Accordion.Control icon={item.emoji}>{item.value}</Accordion.Control>
<Accordion.Panel>{item.description}</Accordion.Panel>
</Accordion.Item>
));
return (
<Accordion
defaultValue="Apples"
classNames={{ chevron: classes.chevron }}
chevron={<IconPlus className={classes.icon} />}
>
{items}
</Accordion>
);
}
You can use any React node as a label for Accordion.Control component.
When you use nested elements in Accordion.Control, it is recommended to
set aria-label attribute to make the control accessible for screen readers.
Bender Bending Rodríguez, (born September 4, 2996), designated Bending Unit 22, and commonly known as Bender, is a bending unit created by a division of MomCorp in Tijuana, Mexico, and his serial number is 2716057. His mugshot id number is 01473. He is Fry's best friend.
Carol Miller (born January 30, 2880), better known as Mom, is the evil chief executive officer and shareholder of 99.7% of Momcorp, one of the largest industrial conglomerates in the universe and the source of most of Earth's robots. She is also one of the main antagonists of the Futurama series.
Homer Jay Simpson (born May 12) is the main protagonist and one of the five main characters of The Simpsons series(or show). He is the spouse of Marge Simpson and father of Bart, Lisa and Maggie Simpson.
import { Group, Avatar, Text, Accordion } from '@mantine/core';
const charactersList = [
{
id: 'bender',
image: 'https://img.icons8.com/clouds/256/000000/futurama-bender.png',
label: 'Bender Bending Rodríguez',
description: 'Fascinated with cooking, though has no sense of taste',
content: "Bender Bending Rodríguez, (born September 4, 2996), designated Bending Unit 22, and commonly known as Bender, is a bending unit created by a division of MomCorp in Tijuana, Mexico, and his serial number is 2716057. His mugshot id number is 01473. He is Fry's best friend.",
},
{
id: 'carol',
image: 'https://img.icons8.com/clouds/256/000000/futurama-mom.png',
label: 'Carol Miller',
description: 'One of the richest people on Earth',
content: "Carol Miller (born January 30, 2880), better known as Mom, is the evil chief executive officer and shareholder of 99.7% of Momcorp, one of the largest industrial conglomerates in the universe and the source of most of Earth's robots. She is also one of the main antagonists of the Futurama series.",
},
{
id: 'homer',
image: 'https://img.icons8.com/clouds/256/000000/homer-simpson.png',
label: 'Homer Simpson',
description: 'Overweight, lazy, and often ignorant',
content: 'Homer Jay Simpson (born May 12) is the main protagonist and one of the five main characters of The Simpsons series(or show). He is the spouse of Marge Simpson and father of Bart, Lisa and Maggie Simpson.',
},
];
interface AccordionLabelProps {
label: string;
image: string;
description: string;
}
function AccordionLabel({ label, image, description }: AccordionLabelProps) {
return (
<Group wrap="nowrap">
<Avatar src={image} radius="xl" size="lg" />
<div>
<Text>{label}</Text>
<Text size="sm" c="dimmed" fw={400}>
{description}
</Text>
</div>
</Group>
);
}
function Demo() {
const items = charactersList.map((item) => (
<Accordion.Item value={item.id} key={item.label}>
<Accordion.Control aria-label={item.label}>
<AccordionLabel {...item} />
</Accordion.Control>
<Accordion.Panel>
<Text size="sm">{item.content}</Text>
</Accordion.Panel>
</Accordion.Item>
));
return (
<Accordion chevronPosition="right" variant="contained" radius="md">
{items}
</Accordion>
);
}
To change transition duration, set transitionDuration prop:
Crisp and refreshing fruit. Apples are known for their versatility and nutritional benefits. They come in a variety of flavors and are great for snacking, baking, or adding to salads.
Naturally sweet and potassium-rich fruit. Bananas are a popular choice for their energy-boosting properties and can be enjoyed as a quick snack, added to smoothies, or used in baking.
Nutrient-packed green vegetable. Broccoli is packed with vitamins, minerals, and fiber. It has a distinct flavor and can be enjoyed steamed, roasted, or added to stir-fries.
import { Accordion } from '@mantine/core';
function Demo() {
return (
<Accordion transitionDuration={1000}>
{/* ...content */}
</Accordion>
)
}
To disable transitions, set transitionDuration to 0:
import { Accordion } from '@mantine/core';
function Demo() {
return (
<Accordion transitionDuration={0}>
{/* ...content */}
</Accordion>
)
}
import { Accordion } from '@mantine/core';
function Demo() {
// Second item will be opened by default
return (
<Accordion defaultValue="item-2">
<Accordion.Item value="item-1">{/* item-1 */}</Accordion.Item>
<Accordion.Item value="item-2">{/* item-2 */}</Accordion.Item>
</Accordion>
);
}
For multiple={true}, set defaultValue as an array of strings:
import { Accordion } from '@mantine/core';
function Demo() {
// Both items are opened by default
return (
<Accordion multiple defaultValue={['item-1', 'item-2']}>
<Accordion.Item value="item-1">{/* item-1 */}</Accordion.Item>
<Accordion.Item value="item-2">{/* item-2 */}</Accordion.Item>
</Accordion>
);
}
Putting a button or a link inside Accordion.Control is a common mistake when
using Accordion. Accordion.Control root element is button. Putting interactive
elements inside other interactive elements is forbidden – you will receive a DOM
validation error from React if you try to implement the following component:
import { Accordion } from '@mantine/core';
// ❌ Incorrect usage: do not do this
function Demo() {
return (
<Accordion.Item value="item-1">
<Accordion.Control>
<Group>
<span>Control 1</span>
<button>My action</button>
</Group>
</Accordion.Control>
<Accordion.Panel>Panel 1</Accordion.Panel>
</Accordion.Item>
);
}
Instead of putting interactive elements inside the Accordion.Control, render them
next to it. For example, you can add ActionIcon or Menu
on the right side of the original control. If you need to display an interactive element
over the Accordion.Control, use position: absolute instead.
Set the disabled prop on the Accordion.Control component to disable it.
When you disable items, users cannot activate them with mouse or keyboard,
and arrow key navigation will skip them:
Crisp and refreshing fruit. Apples are known for their versatility and nutritional benefits. They come in a variety of flavors and are great for snacking, baking, or adding to salads.
Naturally sweet and potassium-rich fruit. Bananas are a popular choice for their energy-boosting properties and can be enjoyed as a quick snack, added to smoothies, or used in baking.
Nutrient-packed green vegetable. Broccoli is packed with vitamins, minerals, and fiber. It has a distinct flavor and can be enjoyed steamed, roasted, or added to stir-fries.
Set the unstyled prop on the Accordion component to remove all non-essential
library styles. Use unstyled prop to style the component with
Styles API without overriding any styles.
Crisp and refreshing fruit. Apples are known for their versatility and nutritional benefits. They come in a variety of flavors and are great for snacking, baking, or adding to salads.
Naturally sweet and potassium-rich fruit. Bananas are a popular choice for their energy-boosting properties and can be enjoyed as a quick snack, added to smoothies, or used in baking.
Nutrient-packed green vegetable. Broccoli is packed with vitamins, minerals, and fiber. It has a distinct flavor and can be enjoyed steamed, roasted, or added to stir-fries.
Accordion supports Styles API, you can add styles to any inner element of the component withclassNames prop. Follow Styles API documentation to learn more.
Crisp and refreshing fruit. Apples are known for their versatility and nutritional benefits. They come in a variety of flavors and are great for snacking, baking, or adding to salads.
Naturally sweet and potassium-rich fruit. Bananas are a popular choice for their energy-boosting properties and can be enjoyed as a quick snack, added to smoothies, or used in baking.
Nutrient-packed green vegetable. Broccoli is packed with vitamins, minerals, and fiber. It has a distinct flavor and can be enjoyed steamed, roasted, or added to stir-fries.
Component Styles API
Hover over selectors to highlight corresponding elements
/*
* Hover over selectors to apply outline styles
*
*/
Example of using Styles API to customize Accordion styles:
Crisp and refreshing fruit. Apples are known for their versatility and nutritional benefits. They come in a variety of flavors and are great for snacking, baking, or adding to salads.
Naturally sweet and potassium-rich fruit. Bananas are a popular choice for their energy-boosting properties and can be enjoyed as a quick snack, added to smoothies, or used in baking.
Nutrient-packed green vegetable. Broccoli is packed with vitamins, minerals, and fiber. It has a distinct flavor and can be enjoyed steamed, roasted, or added to stir-fries.
import { Accordion } from '@mantine/core';
import { data } from './data';
import classes from './Demo.module.css';
function Demo() {
const items = data.map((item) => (
<Accordion.Item key={item.value} value={item.value}>
<Accordion.Control icon={item.emoji}>{item.value}</Accordion.Control>
<Accordion.Panel>{item.description}</Accordion.Panel>
</Accordion.Item>
));
return (
<Accordion maw={400} defaultValue="Apples" classNames={classes}>
{items}
</Accordion>
);
}
AccordionProps type exported from @mantine/core is a generic, it accepts boolean type that
describes multiple state:
import type { AccordionProps } from '@mantine/core';
type MultipleAccordionProps = AccordionProps<true>;
type DefaultAccordionProps = AccordionProps<false>;