Accordion
Accordion
Accordion 컴포넌트를 사용하면 페이지에서 관련된 콘텐츠 섹션을 사용자가 접고 펼칠 수 있게 만들 수 있어요. 콘텐츠가 많을 때 공간을 효율적으로 쓰고 싶다면 정말 유용한 컴포넌트랍니다.
출처: 문서
본문
Accordion 컴포넌트는 페이지에서 관련 콘텐츠 섹션을 사용자가 보여주거나 숨길 수 있게 해줘요.
소개 (Introduction)
Material UI의 Accordion 컴포넌트는 다양한 사용 사례를 다루기 위한 보완적인 유틸리티 컴포넌트 몇 가지를 포함하고 있어요:
- Accordion: 관련 컴포넌트들을 그룹으로 묶는 래퍼(wrapper).
- Accordion Summary: Accordion 헤더의 래퍼로, 클릭하면 콘텐츠를 펼치거나 접어요.
- Accordion Details: Accordion 콘텐츠의 래퍼.
- Accordion Actions: 선택적으로 사용하는, 버튼 세트를 그룹으로 묶는 래퍼.
import * as React from 'react';
import Accordion from '@mui/material/Accordion';
import AccordionActions from '@mui/material/AccordionActions';
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 Button from '@mui/material/Button';
export default function AccordionUsage() {
const id = React.useId();
return (
<div>
<Accordion>
<AccordionSummary
expandIcon={<ExpandMoreIcon />}
aria-controls={`${id}-panel1-content`}
id={`${id}-panel1-header`}
>
<Typography component="span">Accordion 1</Typography>
</AccordionSummary>
<AccordionDetails>
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Suspendisse
malesuada lacus ex, sit amet blandit leo lobortis eget.
</AccordionDetails>
</Accordion>
<Accordion>
<AccordionSummary
expandIcon={<ExpandMoreIcon />}
aria-controls={`${id}-panel2-content`}
id={`${id}-panel2-header`}
>
<Typography component="span">Accordion 2</Typography>
</AccordionSummary>
<AccordionDetails>
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Suspendisse
malesuada lacus ex, sit amet blandit leo lobortis eget.
</AccordionDetails>
</Accordion>
<Accordion defaultExpanded>
<AccordionSummary
expandIcon={<ExpandMoreIcon />}
aria-controls={`${id}-panel3-content`}
id={`${id}-panel3-header`}
>
<Typography component="span">Accordion Actions</Typography>
</AccordionSummary>
<AccordionDetails>
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Suspendisse
malesuada lacus ex, sit amet blandit leo lobortis eget.
</AccordionDetails>
<AccordionActions>
<Button>Cancel</Button>
<Button>Agree</Button>
</AccordionActions>
</Accordion>
</div>
);
}
:::info 이 컴포넌트는 더 이상 Material Design 가이드라인에 문서화되어 있지 않지만, Material UI는 계속 지원할 거예요. :::
기본 사용법 (Basics)
import Accordion from '@mui/material/Accordion';
import AccordionDetails from '@mui/material/AccordionDetails';
import AccordionSummary from '@mui/material/AccordionSummary';
펼치기 아이콘 (Expand icon)
Accordion Summary 컴포넌트의 expandIcon prop을 사용해서 펼치기 표시 아이콘을 바꿔보세요.
컴포넌트는 아이콘이 뒤집히는 트랜지션을 자동으로 처리해 줘요.
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 ArrowDownwardIcon from '@mui/icons-material/ArrowDownward';
import ArrowDropDownIcon from '@mui/icons-material/ArrowDropDown';
export default function AccordionExpandIcon() {
const id = React.useId();
return (
<div>
<Accordion>
<AccordionSummary
expandIcon={<ArrowDownwardIcon />}
aria-controls={`${id}-panel1-content`}
id={`${id}-panel1-header`}
>
<Typography component="span">Accordion 1</Typography>
</AccordionSummary>
<AccordionDetails>
<Typography>
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Suspendisse
malesuada lacus ex, sit amet blandit leo lobortis eget.
</Typography>
</AccordionDetails>
</Accordion>
<Accordion>
<AccordionSummary
expandIcon={<ArrowDropDownIcon />}
aria-controls={`${id}-panel2-content`}
id={`${id}-panel2-header`}
>
<Typography component="span">Accordion 2</Typography>
</AccordionSummary>
<AccordionDetails>
<Typography>
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Suspendisse
malesuada lacus ex, sit amet blandit leo lobortis eget.
</Typography>
</AccordionDetails>
</Accordion>
</div>
);
}
기본으로 펼쳐두기 (Expanded by default)
Accordion 컴포넌트의 defaultExpanded prop을 사용하면 기본으로 펼쳐진 상태로 만들 수 있어요.
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';
export default function AccordionExpandDefault() {
const id = React.useId();
return (
<div>
<Accordion defaultExpanded>
<AccordionSummary
expandIcon={<ExpandMoreIcon />}
aria-controls={`${id}-panel1-content`}
id={`${id}-panel1-header`}
>
<Typography component="span">Expanded by default</Typography>
</AccordionSummary>
<AccordionDetails>
<Typography>
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Suspendisse
malesuada lacus ex, sit amet blandit leo lobortis eget.
</Typography>
</AccordionDetails>
</Accordion>
<Accordion>
<AccordionSummary
expandIcon={<ExpandMoreIcon />}
aria-controls={`${id}-panel2-content`}
id={`${id}-panel2-header`}
>
<Typography component="span">Header</Typography>
</AccordionSummary>
<AccordionDetails>
<Typography>
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Suspendisse
malesuada lacus ex, sit amet blandit leo lobortis eget.
</Typography>
</AccordionDetails>
</Accordion>
</div>
);
}
트랜지션 (Transition)
slots.transition과 slotProps.transition props를 사용해서 Accordion의 기본 트랜지션을 바꿔보세요.
import * as React from 'react';
import Accordion, {
AccordionSlots,
accordionClasses,
} from '@mui/material/Accordion';
import AccordionSummary from '@mui/material/AccordionSummary';
import AccordionDetails, {
accordionDetailsClasses,
} from '@mui/material/AccordionDetails';
import Typography from '@mui/material/Typography';
import ExpandMoreIcon from '@mui/icons-material/ExpandMore';
import Fade from '@mui/material/Fade';
export default function AccordionTransition() {
const id = React.useId();
const [expanded, setExpanded] = React.useState(false);
const handleExpansion = () => {
setExpanded((prevExpanded) => !prevExpanded);
};
return (
<div>
<Accordion
expanded={expanded}
onChange={handleExpansion}
slots={{ transition: Fade as AccordionSlots['transition'] }}
slotProps={{ transition: { timeout: 400 } }}
sx={[
expanded
? {
[`& .${accordionClasses.region}`]: {
height: 'auto',
},
[`& .${accordionDetailsClasses.root}`]: {
display: 'block',
},
}
: {
[`& .${accordionClasses.region}`]: {
height: 0,
},
[`& .${accordionDetailsClasses.root}`]: {
display: 'none',
},
},
]}
>
<AccordionSummary
expandIcon={<ExpandMoreIcon />}
aria-controls={`${id}-panel1-content`}
id={`${id}-panel1-header`}
>
<Typography component="span">Custom transition using Fade</Typography>
</AccordionSummary>
<AccordionDetails>
<Typography>
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Suspendisse
malesuada lacus ex, sit amet blandit leo lobortis eget.
</Typography>
</AccordionDetails>
</Accordion>
<Accordion>
<AccordionSummary
expandIcon={<ExpandMoreIcon />}
aria-controls={`${id}-panel2-content`}
id={`${id}-panel2-header`}
>
<Typography component="span">Default transition using Collapse</Typography>
</AccordionSummary>
<AccordionDetails>
<Typography>
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Suspendisse
malesuada lacus ex, sit amet blandit leo lobortis eget.
</Typography>
</AccordionDetails>
</Accordion>
</div>
);
}
비활성화된 항목 (Disabled item)
Accordion 컴포넌트의 disabled prop을 사용하면 상호작용과 포커스를 비활성화할 수 있어요.
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';
export default function DisabledAccordion() {
const id = React.useId();
return (
<div>
<Accordion>
<AccordionSummary
expandIcon={<ExpandMoreIcon />}
aria-controls={`${id}-panel1-content`}
id={`${id}-panel1-header`}
>
<Typography component="span">Accordion 1</Typography>
</AccordionSummary>
<AccordionDetails>
<Typography>
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Suspendisse
malesuada lacus ex, sit amet blandit leo lobortis eget.
</Typography>
</AccordionDetails>
</Accordion>
<Accordion>
<AccordionSummary
expandIcon={<ExpandMoreIcon />}
aria-controls={`${id}-panel2-content`}
id={`${id}-panel2-header`}
>
<Typography component="span">Accordion 2</Typography>
</AccordionSummary>
<AccordionDetails>
<Typography>
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Suspendisse
malesuada lacus ex, sit amet blandit leo lobortis eget.
</Typography>
</AccordionDetails>
</Accordion>
<Accordion disabled>
<AccordionSummary
expandIcon={<ExpandMoreIcon />}
aria-controls={`${id}-panel3-content`}
id={`${id}-panel3-header`}
>
<Typography component="span">Disabled Accordion</Typography>
</AccordionSummary>
</Accordion>
</div>
);
}
제어되는 Accordion (Controlled Accordion)
Accordion 컴포넌트는 제어(controlled)되거나 비제어(uncontrolled)될 수 있어요.
import * as React from 'react';
import Accordion from '@mui/material/Accordion';
import AccordionDetails from '@mui/material/AccordionDetails';
import AccordionSummary from '@mui/material/AccordionSummary';
import Typography from '@mui/material/Typography';
import ExpandMoreIcon from '@mui/icons-material/ExpandMore';
export default function ControlledAccordions() {
const [expanded, setExpanded] = React.useState<string | false>(false);
const handleChange =
(panel: string) => (event: React.SyntheticEvent, isExpanded: boolean) => {
setExpanded(isExpanded ? panel : false);
};
return (
<div>
<Accordion expanded={expanded === 'panel1'} onChange={handleChange('panel1')}>
<AccordionSummary
expandIcon={<ExpandMoreIcon />}
aria-controls="panel1bh-content"
id="panel1bh-header"
>
<Typography component="span" sx={{ width: '33%', flexShrink: 0 }}>
General settings
</Typography>
<Typography component="span" sx={{ color: 'text.secondary' }}>
I am an accordion
</Typography>
</AccordionSummary>
<AccordionDetails>
<Typography>
Nulla facilisi. Phasellus sollicitudin nulla et quam mattis feugiat.
Aliquam eget maximus est, id dignissim quam.
</Typography>
</AccordionDetails>
</Accordion>
<Accordion expanded={expanded === 'panel2'} onChange={handleChange('panel2')}>
<AccordionSummary
expandIcon={<ExpandMoreIcon />}
aria-controls="panel2bh-content"
id="panel2bh-header"
>
<Typography component="span" sx={{ width: '33%', flexShrink: 0 }}>
Users
</Typography>
<Typography component="span" sx={{ color: 'text.secondary' }}>
You are currently not an owner
</Typography>
</AccordionSummary>
<AccordionDetails>
<Typography>
Donec placerat, lectus sed mattis semper, neque lectus feugiat lectus,
varius pulvinar diam eros in elit. Pellentesque convallis laoreet
laoreet.
</Typography>
</AccordionDetails>
</Accordion>
<Accordion expanded={expanded === 'panel3'} onChange={handleChange('panel3')}>
<AccordionSummary
expandIcon={<ExpandMoreIcon />}
aria-controls="panel3bh-content"
id="panel3bh-header"
>
<Typography component="span" sx={{ width: '33%', flexShrink: 0 }}>
Advanced settings
</Typography>
<Typography component="span" sx={{ color: 'text.secondary' }}>
Filtering has been entirely disabled for whole web server
</Typography>
</AccordionSummary>
<AccordionDetails>
<Typography>
Nunc vitae orci ultricies, auctor nunc in, volutpat nisl. Integer sit
amet egestas eros, vitae egestas augue. Duis vel est augue.
</Typography>
</AccordionDetails>
</Accordion>
<Accordion expanded={expanded === 'panel4'} onChange={handleChange('panel4')}>
<AccordionSummary
expandIcon={<ExpandMoreIcon />}
aria-controls="panel4bh-content"
id="panel4bh-header"
>
<Typography component="span" sx={{ width: '33%', flexShrink: 0 }}>
Personal data
</Typography>
</AccordionSummary>
<AccordionDetails>
<Typography>
Nunc vitae orci ultricies, auctor nunc in, volutpat nisl. Integer sit
amet egestas eros, vitae egestas augue. Duis vel est augue.
</Typography>
</AccordionDetails>
</Accordion>
</div>
);
}
:::info
- 컴포넌트가 제어(controlled) 된다는 것은 부모가 props를 통해 관리한다는 뜻이에요.
- 컴포넌트가 비제어(uncontrolled) 된다는 것은 자신의 로컬 state로 관리한다는 뜻이에요.
제어 및 비제어 컴포넌트에 대해 더 자세히 알고 싶다면 React 문서를 확인하세요. :::
커스터마이즈 (Customization)
한 번에 하나만 펼치기 (Only one expanded at a time)
React의 useState 훅과 함께 expanded prop을 사용하면 한 번에 하나의 Accordion 항목만 펼쳐지게 할 수 있어요.
아래 데모는 시각적 커스터마이즈도 조금 보여줍니다.
import * as React from 'react';
import { styled } from '@mui/material/styles';
import ArrowForwardIosSharpIcon from '@mui/icons-material/ArrowForwardIosSharp';
import MuiAccordion, { AccordionProps } from '@mui/material/Accordion';
import MuiAccordionSummary, {
AccordionSummaryProps,
accordionSummaryClasses,
} from '@mui/material/AccordionSummary';
import MuiAccordionDetails from '@mui/material/AccordionDetails';
import Typography from '@mui/material/Typography';
const Accordion = styled((props: AccordionProps) => (
<MuiAccordion disableGutters elevation={0} square {...props} />
))(({ theme }) => ({
border: `1px solid ${theme.palette.divider}`,
'&:not(:last-child)': {
borderBottom: 0,
},
'&::before': {
display: 'none',
},
}));
const AccordionSummary = styled((props: AccordionSummaryProps) => (
<MuiAccordionSummary
expandIcon={<ArrowForwardIosSharpIcon sx={{ fontSize: '0.9rem' }} />}
{...props}
/>
))(({ theme }) => ({
backgroundColor: 'rgba(0, 0, 0, .03)',
flexDirection: 'row-reverse',
[`& .${accordionSummaryClasses.expandIconWrapper}.${accordionSummaryClasses.expanded}`]:
{
transform: 'rotate(90deg)',
},
[`& .${accordionSummaryClasses.content}`]: {
marginLeft: theme.spacing(1),
},
...theme.applyStyles('dark', {
backgroundColor: 'rgba(255, 255, 255, .05)',
}),
}));
const AccordionDetails = styled(MuiAccordionDetails)(({ theme }) => ({
padding: theme.spacing(2),
borderTop: '1px solid rgba(0, 0, 0, .125)',
}));
export default function CustomizedAccordions() {
const [expanded, setExpanded] = React.useState<string | false>('panel1');
const handleChange =
(panel: string) => (event: React.SyntheticEvent, newExpanded: boolean) => {
setExpanded(newExpanded ? panel : false);
};
return (
<div>
<Accordion expanded={expanded === 'panel1'} onChange={handleChange('panel1')}>
<AccordionSummary aria-controls="panel1d-content" id="panel1d-header">
<Typography component="span">Collapsible Group Item #1</Typography>
</AccordionSummary>
<AccordionDetails>
<Typography>
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Suspendisse
malesuada lacus ex, sit amet blandit leo lobortis eget. Lorem ipsum dolor
sit amet, consectetur adipiscing elit. Suspendisse malesuada lacus ex,
sit amet blandit leo lobortis eget.
</Typography>
</AccordionDetails>
</Accordion>
<Accordion expanded={expanded === 'panel2'} onChange={handleChange('panel2')}>
<AccordionSummary aria-controls="panel2d-content" id="panel2d-header">
<Typography component="span">Collapsible Group Item #2</Typography>
</AccordionSummary>
<AccordionDetails>
<Typography>
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Suspendisse
malesuada lacus ex, sit amet blandit leo lobortis eget. Lorem ipsum dolor
sit amet, consectetur adipiscing elit. Suspendisse malesuada lacus ex,
sit amet blandit leo lobortis eget.
</Typography>
</AccordionDetails>
</Accordion>
<Accordion expanded={expanded === 'panel3'} onChange={handleChange('panel3')}>
<AccordionSummary aria-controls="panel3d-content" id="panel3d-header">
<Typography component="span">Collapsible Group Item #3</Typography>
</AccordionSummary>
<AccordionDetails>
<Typography>
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Suspendisse
malesuada lacus ex, sit amet blandit leo lobortis eget. Lorem ipsum dolor
sit amet, consectetur adipiscing elit. Suspendisse malesuada lacus ex,
sit amet blandit leo lobortis eget.
</Typography>
</AccordionDetails>
</Accordion>
</div>
);
}
제목 레벨 바꾸기 (Changing heading level)
기본적으로 Accordion은 제목에 h3 요소를 사용해요. slotProps.heading.component prop을 사용하면 제목 요소를 바꿔서 문서에서 올바른 제목 계층(hierarchy)을 지킬 수 있어요.
<Accordion slotProps={{ heading: { component: 'h4' } }}>
<AccordionSummary
expandIcon={<ExpandMoreIcon />}
aria-controls="panel1-content"
id="panel1-header"
>
Accordion
</AccordionSummary>
<AccordionDetails>
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Suspendisse malesuada
lacus ex, sit amet blandit leo lobortis eget.
</AccordionDetails>
</Accordion>
성능 (Performance)
Accordion 콘텐츠는 펼쳐지지 않았더라도 기본적으로 mount되어 있어요. 이 기본 동작은 서버 사이드 렌더링과 SEO를 염두에 둔 것입니다.
Accordion Details 안에 큰 컴포넌트 트리가 중첩되어 있거나, Accordion이 많다면 slotProps.transition prop 안에서 unmountOnExit를 true로 설정해서 이 동작을 바꾸고 성능을 개선할 수 있어요:
<Accordion slotProps={{ transition: { unmountOnExit: true } }} />
접근성 (Accessibility)
WAI-ARIA 아코디언 가이드라인은 id와 aria-controls를 설정할 것을 권장하며, 이 경우 Accordion Summary 컴포넌트에 적용하면 돼요.
그러면 Accordion 컴포넌트가 콘텐츠로부터 필요한 aria-labelledby와 id를 파생해 냅니다.
<Accordion>
<AccordionSummary id="panel-header" aria-controls="panel-content">
Header
</AccordionSummary>
<AccordionDetails>
Lorem ipsum dolor sit amet, consectetur adipiscing elit.
</AccordionDetails>
</Accordion>
해부 (Anatomy)
Accordion 컴포넌트는 루트 <div>로 구성되며, 그 안에 Accordion Summary, Accordion Details, 그리고 액션 버튼을 위한 선택적 Accordion Actions가 들어 있어요.
<div class="MuiAccordion-root">
<h3 class="MuiAccordion-heading">
<button class="MuiButtonBase-root MuiAccordionSummary-root" aria-expanded="">
<!-- Accordion summary goes here -->
</button>
</h3>
<div class="MuiAccordion-region" role="region">
<div class="MuiAccordionDetails-root">
<!-- Accordion content goes here -->
</div>
</div>
</div>
Accordion API
데모 (Demos)
이 React 컴포넌트의 사용 예시와 세부 내용은 컴포넌트 데모 페이지에서 확인하세요:
Import
import Accordion from '@mui/material/Accordion';
// or
import { Accordion } from '@mui/material';
Props
| Name | Type | Default | Required | Description |
|---|---|---|---|---|
| children | node |
- | Yes | |
| classes | object |
- | No | Override or extend the styles applied to the component. |
| defaultExpanded | bool |
false |
No | |
| disabled | bool |
false |
No | |
| disableGutters | bool |
false |
No | |
| expanded | bool |
- | No | |
| onChange | function(event: React.SyntheticEvent, expanded: boolean) => void |
- | No | |
| slotProps | { heading?: func | object, region?: func | object, root?: func | object, transition?: func | object } |
{} |
No | |
| slots | { heading?: elementType, region?: elementType, root?: elementType, transition?: elementType } |
{} |
No | |
| sx | Array<func | object | bool> | func | object |
- | No | The system prop that allows defining system overrides as well as additional CSS styles. |
Note: The
refis forwarded to the root element (HTMLDivElement).
Any other props supplied will be provided to the root element (Paper).
상속 (Inheritance)
위에서 명시적으로 문서화되지는 않았지만, Paper 컴포넌트의 props도 Accordion에서 사용할 수 있어요.
테마 기본 props (Theme default props)
테마와 함께 MuiAccordion을 사용하면 이 컴포넌트의 기본 props를 변경할 수 있어요.
슬롯 (Slots)
| Name | Default | Class | Description |
|---|---|---|---|
| root | Paper |
.MuiAccordion-root |
The component that renders the root. |
| heading | 'h3' |
.MuiAccordion-heading |
The component that renders the heading. |
| transition | Collapse |
- | The component that renders the transition. |
| Follow this guide to learn more about the requirements for this component. | |||
| region | 'div' |
.MuiAccordion-region |
The component that renders the region. |
CSS
규칙 이름 (Rule name)
| Global class | Rule name | Description |
|---|---|---|
.Mui-disabled |
- | State class applied to the root element if disabled={true}. |
.Mui-expanded |
- | State class applied to the root element if expanded={true}. |
| - | gutters | Styles applied to the root element unless disableGutters={true}. |
| - | rounded | Styles applied to the root element unless square={true}. |
소스 코드 (Source code)
이 페이지에서 원하는 정보를 찾지 못했다면, 더 자세한 내용을 위해 컴포넌트 구현을 살펴보는 것을 고려해보세요.
AccordionActions API
데모 (Demos)
이 React 컴포넌트의 사용 예시와 세부 내용은 컴포넌트 데모 페이지에서 확인하세요:
Import
import AccordionActions from '@mui/material/AccordionActions';
// or
import { AccordionActions } from '@mui/material';
Props
| Name | Type | Default | Required | Description |
|---|---|---|---|---|
| children | node |
- | No | |
| classes | object |
- | No | Override or extend the styles applied to the component. |
| disableSpacing | bool |
false |
No | |
| sx | Array<func | object | bool> | func | object |
- | No | The system prop that allows defining system overrides as well as additional CSS styles. |
Note: The
refis forwarded to the root element (HTMLDivElement).
Any other props supplied will be provided to the root element (native element).
테마 기본 props (Theme default props)
테마와 함께 MuiAccordionActions를 사용하면 이 컴포넌트의 기본 props를 변경할 수 있어요.
CSS
규칙 이름 (Rule name)
| Global class | Rule name | Description |
|---|---|---|
| - | root | Styles applied to the root element. |
| - | spacing | Styles applied to the root element unless disableSpacing={true}. |
소스 코드 (Source code)
이 페이지에서 원하는 정보를 찾지 못했다면, 더 자세한 내용을 위해 컴포넌트 구현을 살펴보는 것을 고려해보세요.
AccordionDetails API
데모 (Demos)
이 React 컴포넌트의 사용 예시와 세부 내용은 컴포넌트 데모 페이지에서 확인하세요:
Import
import AccordionDetails from '@mui/material/AccordionDetails';
// or
import { AccordionDetails } from '@mui/material';
Props
| Name | Type | Default | Required | Description |
|---|---|---|---|---|
| children | node |
- | No | |
| classes | object |
- | No | Override or extend the styles applied to the component. |
| sx | Array<func | object | bool> | func | object |
- | No | The system prop that allows defining system overrides as well as additional CSS styles. |
Note: The
refis forwarded to the root element (HTMLDivElement).
Any other props supplied will be provided to the root element (native element).
테마 기본 props (Theme default props)
테마와 함께 MuiAccordionDetails를 사용하면 이 컴포넌트의 기본 props를 변경할 수 있어요.
CSS
규칙 이름 (Rule name)
| Global class | Rule name | Description |
|---|---|---|
| - | root | Styles applied to the root element. |
소스 코드 (Source code)
이 페이지에서 원하는 정보를 찾지 못했다면, 더 자세한 내용을 위해 컴포넌트 구현을 살펴보는 것을 고려해보세요.
AccordionSummary API
데모 (Demos)
이 React 컴포넌트의 사용 예시와 세부 내용은 컴포넌트 데모 페이지에서 확인하세요:
Import
import AccordionSummary from '@mui/material/AccordionSummary';
// or
import { AccordionSummary } from '@mui/material';
Props
| Name | Type | Default | Required | Description |
|---|---|---|---|---|
| children | node |
- | No | |
| classes | object |
- | No | Override or extend the styles applied to the component. |
| expandIcon | node |
- | No | |
| focusVisibleClassName | string |
- | No | |
| slotProps | { content?: func | object, expandIconWrapper?: func | object, root?: func | object } |
{} |
No | |
| slots | { content?: elementType, expandIconWrapper?: elementType, root?: elementType } |
{} |
No | |
| sx | Array<func | object | bool> | func | object |
- | No | The system prop that allows defining system overrides as well as additional CSS styles. |
Note: The
refis forwarded to the root element (HTMLButtonElement).
Any other props supplied will be provided to the root element (ButtonBase).
상속 (Inheritance)
위에서 명시적으로 문서화되지는 않았지만, ButtonBase 컴포넌트의 props도 AccordionSummary에서 사용할 수 있어요.
테마 기본 props (Theme default props)
테마와 함께 MuiAccordionSummary를 사용하면 이 컴포넌트의 기본 props를 변경할 수 있어요.
슬롯 (Slots)
| Name | Default | Class | Description |
|---|---|---|---|
| root | ButtonBase |
.MuiAccordionSummary-root |
The component that renders the root slot. |
| content | div |
.MuiAccordionSummary-content |
The component that renders the content slot. |
| expandIconWrapper | div |
.MuiAccordionSummary-expandIconWrapper |
The component that renders the expand icon wrapper slot. |
CSS
규칙 이름 (Rule name)
| Global class | Rule name | Description |
|---|---|---|
.Mui-disabled |
- | State class applied to the root element if disabled={true}. |
.Mui-expanded |
- | State class applied to the root element, children wrapper element and IconButton component if expanded={true}. |
.Mui-focusVisible |
- | State class applied to the ButtonBase root element if the button is keyboard focused. |
| - | gutters | Styles applied to the root element unless disableGutters={true}. |
소스 코드 (Source code)
이 페이지에서 원하는 정보를 찾지 못했다면, 더 자세한 내용을 위해 컴포넌트 구현을 살펴보는 것을 고려해보세요.