Accordion — это компонент, позволяющий создавать сворачиваемые панели с заголовком и содержимым. Основные части компонента — AccordionSummary и AccordionDetails, каждая из которых выполняет определённую роль в организации интерфейса.
AccordionSummary используется для отображения заголовка
панели. Этот элемент отвечает за видимую часть аккордеона, по которой
пользователь кликает для открытия или закрытия содержимого.
Основные свойства AccordionSummary:
ExpandMoreIcon из MUI
Icons.aria-controls.Пример использования:
import 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';
function ExampleAccordion() {
return (
<Accordion>
<AccordionSummary
expandIcon={<ExpandMoreIcon />}
aria-controls="panel1-content"
id="panel1-header"
>
<Typography>Заголовок панели</Typography>
</AccordionSummary>
<AccordionDetails>
<Typography>
Содержимое панели. Здесь можно разместить любой JSX, включая другие компоненты.
</Typography>
</AccordionDetails>
</Accordion>
);
}
Ключевой момент: AccordionSummary должен содержать интерактивный элемент для управления раскрытием панели, обычно это иконка или текст заголовка.
AccordionDetails содержит контент панели, который
становится видимым при раскрытии аккордеона. Этот блок может включать
текст, таблицы, формы, списки и другие компоненты MUI.
Основные особенности AccordionDetails:
Accordion.sx или
className для кастомизации внешнего вида.Пример использования с кастомными стилями:
<AccordionDetails sx={{ backgroundColor: '#f5f5f5', padding: 2 }}>
<Typography>
Дополнительный контент с кастомными отступами и фоном.
</Typography>
</AccordionDetails>
Для корректного управления аккордеоном MUI использует
ARIA-связки. AccordionSummary должен иметь
aria-controls, указывающий на id
AccordionDetails, а также уникальный id. Это
обеспечивает:
expanded и onChange:<Accordion expanded={expanded === 'panel1'} onCha nge={handleChange('panel1')}>
<AccordionSummary expandIcon={<ExpandMoreIcon />}>
<Typography>Заголовок</Typography>
</AccordionSummary>
<AccordionDetails>
<Typography>Содержимое</Typography>
</AccordionDetails>
</Accordion>
Множественные панели с независимым состоянием, используя массив состояний для хранения информации о раскрытых панелях.
Кастомизация и стилизация с помощью
sx, styled или CSS-классов. Например, можно
изменить цвет текста заголовка при раскрытии или добавить анимацию для
содержимого.
<AccordionSummary
sx={{
'&.Mui-expanded': { backgroundColor: '#e0f7fa' },
fontWeight: 'bold'
}}
>
<Typography>Кастомный заголовок</Typography>
</AccordionSummary>
AccordionSummary и AccordionDetails для
единообразного отображения текста.AccordionDetails лучше
использовать контейнеры (Box, Stack) для
правильного выравнивания и отступов.expanded и
onChange позволяют создавать интерфейсы с логикой раскрытия
нескольких панелей одновременно или поочередного раскрытия.Эта комбинация компонентов — основа для создания динамических и структурированных интерфейсов, позволяя организовать большое количество информации компактно и удобно для пользователя.