Компонент Collapse в Chakra UI предназначен для плавного скрытия и раскрытия содержимого. Он часто используется для создания аккордеонов, выпадающих панелей или интерактивных блоков, где необходимо управлять видимостью контента. Основная идея заключается в управлении высотой элемента: при закрытии высота анимированно уменьшается до нуля, а при открытии — увеличивается до исходного размера.
import { Collapse, Button, Box } from '@chakra-ui/react';
import { useState } from 'react';
function Example() {
const [isOpen, setIsOpen] = useState(false);
return (
<>
<Button onCl ick={() => setIsOpen(!isOpen)}>
{isOpen ? 'Скрыть' : 'Показать'}
</Button>
<Collapse in={isOpen}>
<Box p="4" bg="teal.100">
Контент внутри Collapse
</Box>
</Collapse>
</>
);
}
В этом примере свойство in контролирует состояние
компонента: true — контент виден, false —
скрыт. Анимация происходит автоматически, без необходимости ручного
управления стилями.
true,
добавляется плавное изменение прозрачности при раскрытии и скрытии.
Полезно для создания более мягких визуальных эффектов.Пример использования animateOpacity и
startingHeight:
<Collapse in={isOpen} animateOpacity startingHeight="20px">
<Box p="4" bg="orange.100">
Частично видимый контент
</Box>
</Collapse>
Chakra UI позволяет настраивать продолжительность анимации через системные стили, используя объект transition. По умолчанию анимация происходит плавно, но можно задать кастомные значения времени и функции плавности:
<Collapse
in={isOpen}
animateOpacity
style={{ transition: 'height 0.5s ease, opacity 0.5s ease' }}
>
<Box p="4" bg="purple.100">
Контент с кастомной анимацией
</Box>
</Collapse>
Accordion в Chakra UI строится на основе компонента Collapse, обеспечивая сложное взаимодействие нескольких панелей с раскрытием и скрытием. Каждая панель использует Collapse для анимации содержимого:
import { Accordion, AccordionItem, AccordionButton, AccordionPanel, Box } from '@chakra-ui/react';
<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>
Здесь каждая AccordionPanel автоматически использует
Collapse, обеспечивая плавное открытие и закрытие при клике на
AccordionButton.
{isOpen && (
<Collapse in={isOpen}>
<Box p="4" bg="green.100">
Динамически рендеримый контент
</Box>
</Collapse>
)}
<Collapse in={isOpen}>
<Box p="4" bg="gray.100">
Основной контент
<Collapse in={nestedOpen}>
<Box p="2" bg="gray.200">
Вложенный контент
</Box>
</Collapse>
</Box>
</Collapse>
Компонент Collapse в Chakra UI сочетает простоту использования с гибкостью настройки анимации и визуальных эффектов, что делает его универсальным инструментом для интерактивного интерфейса.