Компонент Accordion в Chakra UI представляет собой удобный инструмент для организации контента в виде сворачиваемых панелей. Он позволяет пользователю раскрывать или скрывать отдельные секции, экономя пространство и улучшая читаемость интерфейса. Accordion поддерживает управление состоянием через пропсы, имеет гибкие настройки внешнего вида и поведения, и тесно интегрируется с другими компонентами Chakra UI.
Базовая структура Accordion состоит из трёх ключевых компонентов:
Пример базового синтаксиса:
import { Accordion, AccordionItem, AccordionButton, AccordionPanel, Box } from "@chakra-ui/react";
function BasicAccordion() {
return (
<Accordion>
<AccordionItem>
<h2>
<AccordionButton>
<Box flex="1" textAlign="left">
Секция 1
</Box>
</AccordionButton>
</h2>
<AccordionPanel pb={4}>
Содержимое секции 1
</AccordionPanel>
</AccordionItem>
<AccordionItem>
<h2>
<AccordionButton>
<Box flex="1" textAlign="left">
Секция 2
</Box>
</AccordionButton>
</h2>
<AccordionPanel pb={4}>
Содержимое секции 2
</AccordionPanel>
</AccordionItem>
</Accordion>
);
}
Ключевые моменты:
h2 → AccordionButton → Box является рекомендуемой
практикой.Accordion поддерживает два режима раскрытия секций:
Пример включения множественного режима:
<Accordion allowMultiple>
<AccordionItem>...</AccordionItem>
<AccordionItem>...</AccordionItem>
</Accordion>
Для контроля активной секции программно используется проп
index и событие onChange:
<Accordion index={0} onCha nge={(index) => console.log(index)}>
<AccordionItem>...</AccordionItem>
<AccordionItem>...</AccordionItem>
</Accordion>
index может быть числом или массивом чисел (в случае
allowMultiple).onChange возвращает индекс выбранной секции (или массив
индексов для allowMultiple).Chakra UI позволяет легко стилизовать Accordion через системные пропсы:
padding,
margin, fontSize.bg, color,
borderColor._expanded,
_hover, _focus.Пример стилизованного AccordionItem:
<AccordionItem>
<h2>
<AccordionButton _expanded={{ bg: "blue.500", color: "white" }} _hover={{ bg: "blue.100" }}>
<Box flex="1" textAlign="left">
Секция с кастомной стилизацией
</Box>
</AccordionButton>
</h2>
<AccordionPanel pb={4}>
Содержимое с уникальным оформлением
</AccordionPanel>
</AccordionItem>
_expanded применяется, когда секция открыта._hover управляет эффектом при наведении.Часто для Accordion используют иконки для визуальной индикации состояния секции. Chakra предоставляет компонент AccordionIcon, который автоматически меняет положение в зависимости от состояния.
<AccordionButton>
<Box flex="1" textAlign="left">
Секция с иконкой
</Box>
<AccordionIcon />
</AccordionButton>
Особенности AccordionIcon:
color,
boxSize, margin.Accordion хорошо сочетается с другими компонентами Chakra UI, включая Flex, Stack, Grid и Image. Секции можно наполнять любым контентом – текст, изображения, формы, списки.
Пример интеграции с Grid:
<AccordionItem>
<h2>
<AccordionButton>
<Box flex="1" textAlign="left">Секция с сеткой</Box>
<AccordionIcon />
</AccordionButton>
</h2>
<AccordionPanel pb={4}>
<Grid templateColumns="repeat(3, 1fr)" gap={4}>
<Box bg="red.100" height="50px" />
<Box bg="green.100" height="50px" />
<Box bg="blue.100" height="50px" />
</Grid>
</AccordionPanel>
</AccordionItem>
Accordion в Chakra UI полностью поддерживает доступность:
Tab перемещает фокус между секциями.Enter или Space открывают/закрывают
секцию.ArrowUp и ArrowDown позволяют перемещаться
между заголовками.<Accordion defaultIndex={[1]} allowMultiple>
<AccordionItem>...</AccordionItem>
<AccordionItem>...</AccordionItem>
</Accordion>
defaultIndex принимает число или массив чисел для
множественного режима.Accordion автоматически применяет плавную анимацию при открытии и
закрытии секции. В Chakra UI используется Collapse,
поэтому можно управлять временем и функцией анимации через системные
настройки темы или напрямую через motionProps при
необходимости.
AccordionIcon для улучшения визуальной
индикации.allowMultiple для FAQ и длинного
контента.Grid или Flex для организации
сложного контента._expanded для создания динамической
стилизации открытой секции.h2,
h3 и т.д.) и управление фокусом.Accordion в Chakra UI сочетает простоту использования с мощной кастомизацией, позволяя создавать как простые списки, так и сложные, интерактивные интерфейсы с минимальными усилиями.