기본 <details> 요소를 사용하는 CSS 전용 Tailwind CSS 축소 가능 패널. JavaScript 없이 콘텐츠 섹션을 표시하고 숨깁니다. WCAG AA 액세스 가능하며 Django, HTMX, Laravel, React 및 모든 스택에서 작동합니다.
{% trans "Collapsible components allow users to expand and collapse sections of content. Built with a hidden checkbox pattern, collapsibles work without any JavaScript and support animated transitions via CSS grid." %}
CSS 전용이며 JavaScript가 필요하지 않습니다. WCAG AA 액세스 가능 및 프레임워크에 구애받지 않음 — Django, HTMX, Laravel, React 및 모든 스택에서 작동합니다.
| 수업 | 유형 | 설명 |
|---|---|---|
| collapsible | 베이스 | 숨겨진 체크박스로 구동되는 축소 가능한 컨테이너 |
| collapsible-toggle | 수정자 | 열기/닫기 상태를 제어하는 숨겨진 체크박스 입력 |
| collapsible-title | 수정자 | 접을 수 있는 항목을 전환하는 클릭 가능한 라벨 |
| collapsible-content | 수정자 | 열면 공개되는 애니메이션 콘텐츠 영역 |
| collapsible-arrow | 수정자 | 제목에 회전 화살표 표시를 추가합니다. |
| collapsible-group | 수정자 | 아코디언 스타일의 그룹화된 접이식 포장지 |
| collapsible-overlay | 수정자 | 서랍형 접이식 제품의 오버레이 변형 |
| collapsible-peek | 수정자 | 접었을 때 콘텐츠를 살짝 보여줍니다. |
| is-collapsible-open | 수정자 | 열린 상태를 강제하는 JS 적용 클래스 |
| is-collapsible-close | 수정자 | 닫힌 상태를 강제하는 JS 적용 클래스 |
기본 사용법
숨겨진 확인란은 열기/닫기 상태를 제어합니다. 라벨이 이를 트리거합니다. collapsible-content div가 열린 상태로 움직입니다.
1 2 3 4 5 6 7 8 9 10 11 | <div class="collapsible border border-base-soft rounded-lg"> <input type="checkbox" class="collapsible-toggle" id="col-basic" /> <label for="col-basic" class="collapsible-title px-4 py-3 font-medium">Click to expand</label> <div class="collapsible-content"> <div> <div class="px-4 pb-3 text-sm opacity-70"> This content is hidden until expanded. </div> </div> </div> </div> |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | import { useCollapsible } from 'frutjam/react' export default function CollapsibleDemo() { const collapsible = useCollapsible() return ( <div ref={collapsible.ref} className="collapsible border border-base-soft rounded-lg"> <button className="collapsible-title px-4 py-3 font-medium" onClick={collapsible.toggle}>Click to expand</button> <div className="collapsible-content"> <div> <div className="px-4 pb-3 text-sm opacity-70"> This content is hidden until expanded. </div> </div> </div> </div> ) } |
화살표 표시 포함
열림/닫힘 상태를 반영하는 회전 갈매기형 모양을 얻으려면 라벨에 접이식 화살표를 추가하세요.
1 2 3 4 5 6 7 8 9 10 11 | <div class="collapsible border border-base-soft rounded-lg"> <input type="checkbox" class="collapsible-toggle" id="col-arrow" /> <label for="col-arrow" class="collapsible-title collapsible-arrow px-4 py-3 font-medium">What is Frutjam?</label> <div class="collapsible-content"> <div> <div class="px-4 pb-3 text-sm opacity-70"> Frutjam is a Tailwind CSS v4 component library built with CSS utilities and a PostCSS plugin. </div> </div> </div> </div> |
여러 개의 접이식 물건
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 | <div class="flex flex-col gap-2"> <div class="collapsible border border-base-soft rounded-lg"> <input type="checkbox" class="collapsible-toggle" id="col-1" /> <label for="col-1" class="collapsible-title collapsible-arrow px-4 py-3 font-medium">Section One</label> <div class="collapsible-content"> <div> <div class="px-4 pb-3 text-sm opacity-70">Content for the first section.</div> </div> </div> </div> <div class="collapsible border border-base-soft rounded-lg"> <input type="checkbox" class="collapsible-toggle" id="col-2" /> <label for="col-2" class="collapsible-title collapsible-arrow px-4 py-3 font-medium">Section Two</label> <div class="collapsible-content"> <div> <div class="px-4 pb-3 text-sm opacity-70">Content for the second section.</div> </div> </div> </div> <div class="collapsible border border-base-soft rounded-lg"> <input type="checkbox" class="collapsible-toggle" id="col-3" /> <label for="col-3" class="collapsible-title collapsible-arrow px-4 py-3 font-medium">Section Three</label> <div class="collapsible-content"> <div> <div class="px-4 pb-3 text-sm opacity-70">Content for the third section.</div> </div> </div> </div> </div> |
기본적으로 열기
패널 열기를 시작하려면 확인란 입력에 checked를 추가하세요.
1 2 3 4 5 6 7 8 9 10 11 | <div class="collapsible border border-base-soft rounded-lg"> <input type="checkbox" class="collapsible-toggle" id="col-open" checked /> <label for="col-open" class="collapsible-title collapsible-arrow px-4 py-3 font-medium">Open by default</label> <div class="collapsible-content"> <div> <div class="px-4 pb-3 text-sm opacity-70"> This content is visible on initial load. </div> </div> </div> </div> |
JS 제어
체크박스를 사용하는 대신 래퍼 요소에서 collapsible-open을 전환하세요. 트리거가 다른 곳에 있을 때 유용합니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | <div class="collapsible collapsible-open border border-base-soft rounded-lg" id="js-col"> <button class="collapsible-title collapsible-arrow px-4 py-3 font-medium" onclick="this.closest('.collapsible').classList.toggle('collapsible-open')" > Toggle via JS (starts open) </button> <div class="collapsible-content"> <div> <div class="px-4 py-3 text-sm opacity-70 border-t border-base-soft"> No hidden checkbox needed — state is managed by the <code>collapsible-open</code> class. </div> </div> </div> </div> |
엿보기 변형
collapsible-peek는 그라데이션 페이드 및 오버레이 트리거가 포함된 잘린 미리보기를 표시합니다.
축소 시 표시되는 콘텐츠의 양을 제어하려면 --peek-height를 재정의하세요.
1 2 3 4 5 6 7 8 9 10 11 12 13 | <div class="collapsible collapsible-peek rounded-xl border border-base-soft" style="--peek-height: 5rem;"> <input type="checkbox" class="collapsible-toggle" id="col-peek" /> <div class="collapsible-content"> <div class="p-4 text-sm leading-relaxed"> <p>Frutjam is a Tailwind CSS v4 component library built around a PostCSS plugin architecture. Every component is a set of <code>@utility</code> definitions that integrate natively with Tailwind's utility pipeline.</p> <p class="mt-3">Theming is handled entirely through CSS custom properties. Swap themes by setting a <code>data-theme</code> attribute on any container, or override individual tokens inline.</p> <p class="mt-3">Components ship with sensible defaults and are designed to compose cleanly.</p> </div> </div> <label for="col-peek" class="collapsible-overlay"> <span class="btn btn-sm">Read more</span> </label> </div> |
JS 및 반응 도우미
모든 트리거에서 프로그래밍 방식 제어 및 자동 aria-expanded 동기화를 위해 frutjam/js의 createCollapsible 또는 frutjam/react의 useCollapsible을 사용하세요.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | <button class="btn btn-sm mb-3" id="col-helper-btn">Toggle</button> <div class="collapsible border border-base-soft rounded-lg" id="js-collapsible"> <div class="collapsible-title collapsible-arrow px-4 py-3 font-medium">Controlled section</div> <div class="collapsible-content"> <div> <div class="px-4 pb-3 text-sm opacity-70">Toggled by the external button above.</div> </div> </div> </div> <script type="module"> import { createCollapsible } from 'frutjam/js' const col = createCollapsible(document.getElementById('js-collapsible')) document.getElementById('col-helper-btn').onclick = () => col.toggle() </script> |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | import { useCollapsible } from 'frutjam/react' export default function CollapsibleDemo() { const collapsible = useCollapsible() return ( <> <button className="btn btn-sm mb-3" onClick={collapsible.toggle}>Toggle</button> <div ref={collapsible.ref} className="collapsible border border-base-soft rounded-lg"> <div className="collapsible-title collapsible-arrow px-4 py-3 font-medium">Controlled section</div> <div className="collapsible-content"> <div> <div className="px-4 pb-3 text-sm opacity-70">Toggled by the external button above.</div> </div> </div> </div> </> ) } |
접이식 그룹이 있는 외부 트리거
.collapsible 외부의 라벨을 허용하려면 트리거와 축소 가능 항목을 collapsible-group에 래핑하세요.
is-collapsible-open 및 is-collapsible-close를 통해 열기/닫기 상태에 응답합니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | <div class="collapsible-group border border-base-soft rounded-lg p-4 flex flex-col gap-3"> <div class="flex items-center justify-between"> <span class="font-medium">Section A</span> <label for="cg-1" class="btn btn-sm btn-ghost"> <span class="is-collapsible-close">Expand</span> <span class="is-collapsible-open">Collapse</span> </label> </div> <div class="collapsible"> <input type="checkbox" class="collapsible-toggle" id="cg-1" /> <div class="collapsible-content"> <div> <div class="text-sm opacity-70"> This content is toggled by the button above, which lives outside <code>.collapsible</code> but inside <code>.collapsible-group</code>. </div> </div> </div> </div> </div> |
Claude Code, Cursor 또는 다른 AI 편집기를 사용하시나요?
Cherry MCP는 AI 편집기에 요청 시 정확한 접을 수 있는 클래스 이름과 구조를 제공합니다. 더 이상 환각에 빠진 수업은 없습니다.