MUI is a popular open-source library of React components for building web applications. It provides a set of pre-designed UI components, such as buttons, forms, icons, typography, and more, that can be easily customized and integrated into any React application.
Accordion is a type of UI component that allows users to collapse and expand content sections based on their needs. It is a popular UI pattern that is used in many web applications to provide a more streamlined user experience. MUI Accordion API provides a wide range of options for building such accordion components with ease.
To use the Accordion component, you need to provide it with some content that will be collapsed and expanded as per the user’s interaction. The Accordion component has different types of props that allow you to modify the behavior, look, and feel of the accordion. You can use an expanded prop to determine whether the Accordion is expanded or collapsed.Â
Â
Props:
- children – The content of the Accordion component, typically used to render AccordionDetails and AccordionSummary components.
- classes – Override or extend the styles applied to the component using the MUI withStyles higher-order component.
- defaultExpanded – If true, the Accordion will be expanded by default when the page loads.
- disabled – If true, the Accordion will be disabled and cannot be expanded or collapsed.
- disableGutters – If true, the Accordion will not have gutters (padding) on its sides.
- expanded – If true, the Accordion will be expanded and show its content.
- onChange – Callback function that is called when the Accordion changes its state (expanded or collapsed).
- square – If true, the Accordion will be square instead of rounded at the corners.
- sx – Custom styles for the Accordion component using the sx prop from the MUI theme, enabling the use of the MUI theme and custom styles together.
- TransitionComponent – The component used for the transition when the Accordion expands or collapses, typically an MUI Collapse or Grow component.
- TransitionProps – Additional props to pass to the TransitionComponent, such as timeout or appear.
CSS:
- root – The root element of the Accordion component, used to apply styles to the component as a whole.
- rounded – A Boolean value that determines if the Accordion should have rounded corners or not.
- expanded – A class applied to the Accordion when it is expanded, used to apply styles to the Accordion’s content when it is expanded.
- disabled – A class applied to the Accordion when it is disabled, used to apply styles to the Accordion when it cannot be interacted with.
- gutters – A class applied to the Accordion’s content wrapper, used to apply padding to the Accordion’s content.
- region – A CSS selector for the region of the Accordion, used to apply styles to a specific region of the Accordion, such as the header or content region.
Inheritance: The Accordion component inherits the props of the ‘Paper’ component, which means we can use all ‘Paper’ props in the accordion component. It can be used to target nested components.
Syntax:
Import Accordion API:
import { Accordion } from '@mui/material';
Creating React Project:
Step 1: Create a react app. Use the command below.
npx create-react-app project_name
Step 2: Go to your project directory to perform different operations.
cd project_name
Step 3: Installing MUI modules.
npm install @mui/material @emotion/react npm install @emotion/styled @mui/icons-material
Project Structure:
Project Structure
Example 1: Basic MUI Accordion implementation.
Javascript
import * as React from "react" ; import Accordion from "@mui/material/Accordion" ; import AccordionSummary from "@mui/material/AccordionSummary" ; import AccordionDetails from "@mui/material/AccordionDetails" ; import Typography from "@mui/material/Typography" ; import ExpandMoreIcon from "@mui/icons-material/ExpandMore" ; import { Grid } from "@mui/material" ;   export default function SimpleAccordion() {     return (         <>             <h1 style={{                 display: "flex" ,                 justifyContent: "center" ,                 color: "green"              }}>                 Geeksforneveropen courses             </h1>               <Grid container spacing={2}>                 <Grid item xs={6}>                     <item>                         <div>                             <Accordion>                                 <AccordionSummary                                     expandIcon={<ExpandMoreIcon />}                                     aria-controls= "panel1a-content"                                     id= "panel1a-header"                                 >                                     <Typography>What is a DSA course?</Typography>                                 </AccordionSummary>                                 <AccordionDetails>                                     <Typography>                                         This DSA course covers all topics.                                     </Typography>                                 </AccordionDetails>                             </Accordion>                             <Accordion>                                 <AccordionSummary                                     expandIcon={<ExpandMoreIcon />}                                     aria-controls= "panel2a-content"                                     id= "panel2a-header"                                 >                                     <Typography>Why learn DSA?</Typography>                                 </AccordionSummary>                                 <AccordionDetails>                                     <Typography>                                         Learning DSA is important                                         for software developer.                                     </Typography>                                 </AccordionDetails>                             </Accordion>                             <Accordion>                                 <AccordionSummary                                     expandIcon={<ExpandMoreIcon />}                                     aria-controls= "panel2a-content"                                     id= "panel2a-header"                                 >                                     <Typography>                                         Topics covered in DSA course?                                     </Typography>                                 </AccordionSummary>                                 <AccordionDetails>                                     <Typography>                                         It covers arrays, linked lists, trees.                                     </Typography>                                 </AccordionDetails>                             </Accordion>                         </div>                     </item>                 </Grid>                 <Grid item xs={6}>                     <item>                         <div>                             <Accordion>                                 <AccordionSummary                                     expandIcon={<ExpandMoreIcon />}                                     aria-controls= "panel1a-content"                                     id= "panel1a-header"                                 >                                     <Typography>What is an ML course?</Typography>                                 </AccordionSummary>                                 <AccordionDetails>                                     <Typography>                                         An ML course is a computer science                                         course that teaches students about                                         Machine Learning.                                     </Typography>                                 </AccordionDetails>                             </Accordion>                             <Accordion>                                 <AccordionSummary                                     expandIcon={<ExpandMoreIcon />}                                     aria-controls= "panel2a-content"                                     id= "panel2a-header"                                 >                                     <Typography>What topics are covered?</Typography>                                 </AccordionSummary>                                 <AccordionDetails>                                     <Typography>                                         supervised learning, unsupervised                                         learning, deep learning,                                         neural networks, decision trees.                                     </Typography>                                 </AccordionDetails>                             </Accordion>                             <Accordion>                                 <AccordionSummary                                     expandIcon={<ExpandMoreIcon />}                                     aria-controls= "panel2a-content"                                     id= "panel2a-header"                                 >                                     <Typography>How to prepare ?</Typography>                                 </AccordionSummary>                                 <AccordionDetails>                                     <Typography>                                         Start learning programming                                         languages like Python                                         or R.                                     </Typography>                                 </AccordionDetails>                             </Accordion>                         </div>                     </item>                 </Grid>             </Grid>         </>     ); } |
Output:
Â
Example 2: MUI Accordion implementation with icons in it.
Javascript
import React from "react" ; import ExpandMoreIcon from "@mui/icons-material/ExpandMore" ; import DesignServicesIcon from '@mui/icons-material/DesignServices' ; import WebIcon from '@mui/icons-material/Web' ; import AnalyticsIcon from '@mui/icons-material/Analytics' ; import GroupsIcon from '@mui/icons-material/Groups' ; import {     Accordion,     AccordionDetails,     AccordionSummary,     Typography, } from "@mui/material" ;   export default function MyAccordion() {     return (         <>             <h1 style={{                 display: "flex" ,                 justifyContent: "center" ,                 color: "green"              }}>                 Geeksforneveropen             </h1>             <h1 style={{                 display: "flex" ,                 justifyContent: "center"              }}>                 Services             </h1>                           <Accordion>                 <AccordionSummary                     expandIcon={<ExpandMoreIcon />}                     aria-controls= "panel1a-content"                     id= "panel1a-header"                 >                     <DesignServicesIcon />                     <Typography>Web Design</Typography>                 </AccordionSummary>                 <AccordionDetails>                     <Typography>                         Web design is used for creating the                         visual look and feel of a website.                     </Typography>                 </AccordionDetails>             </Accordion>             <Accordion>                 <AccordionSummary                     expandIcon={<ExpandMoreIcon />}                     aria-controls= "panel2a-content"                     id= "panel2a-header"                 >                     <WebIcon />                     <Typography>Web Development</Typography>                 </AccordionSummary>                 <AccordionDetails>                     <Typography>                         Web development involves creating the                         website and making it functional.                     </Typography>                 </AccordionDetails>             </Accordion>             <Accordion>                 <AccordionSummary                     expandIcon={<ExpandMoreIcon />}                     aria-controls= "panel3a-content"                     id= "panel3a-header"                 >                     <AnalyticsIcon />                     <Typography>SEO</Typography>                 </AccordionSummary>                 <AccordionDetails>                     <Typography>                         SEO is used to optimize a website                         to improve its visibility in                         search engine pages.                     </Typography>                 </AccordionDetails>             </Accordion>             <Accordion>                 <AccordionSummary                     expandIcon={<ExpandMoreIcon />}                     aria-controls= "panel3a-content"                     id= "panel3a-header"                 >                     <GroupsIcon />                     <Typography>Social Media Marketing</Typography>                 </AccordionSummary>                 <AccordionDetails>                     <Typography>                         It involves some social media                         platforms like Facebook, Twitter                         & Instagram to market your brand.                     </Typography>                 </AccordionDetails>             </Accordion>         </>     ); } |
Output:
Â
Reference: https://mui.com/material-ui/api/accordion/