Nur CSS-komprimierbares Tailwind-CSS-Panel unter Verwendung des nativen CSS <details> Element. Inhaltsabschnitte ohne JavaScript ein- und ausblenden. WCAG AA zugänglich, funktioniert mit Django, HTMX, Laravel, React und jedem Stack.
Reduzierbare Komponenten ermöglichen Benutzern das Erweitern und Reduzieren von Inhaltsabschnitten. Zusammenklappbare Elemente basieren auf einem versteckten Kontrollkästchenmuster, funktionieren ohne JavaScript und unterstützen animierte Übergänge über ein CSS-Raster.
Nur CSS, kein JavaScript erforderlich. WCAG AA zugänglich und Framework-unabhängig – funktioniert mit Django, HTMX, Laravel, React und jedem Stack.
| Klasse | Typ | Beschreibung |
|---|---|---|
| collapsible | Base | Zusammenklappbarer Behälter mit versteckter Checkbox |
| collapsible-toggle | Modifikator | Versteckte Kontrollkästchen-Eingabe, die den Öffnungs-/Schließzustand steuert |
| collapsible-title | Modifikator | Anklickbares Etikett, das das Reduzierbare ein- und ausschaltet |
| collapsible-content | Modifikator | Animierter Inhaltsbereich wird angezeigt, wenn er geöffnet ist |
| collapsible-arrow | Modifikator | Fügt dem Titel eine rotierende Pfeilanzeige hinzu |
| collapsible-group | Modifikator | Verpackung für gruppierte Faltschachteln im Akkordeon-Stil |
| collapsible-overlay | Modifikator | Auflagevariante für Schubladen-Klappschränke |
| collapsible-peek | Modifikator | Zeigt im minimierten Zustand einen Einblick in den Inhalt |
| is-collapsible-open | Modifikator | Von JS angewendete Klasse, um den offenen Zustand zu erzwingen |
| is-collapsible-close | Modifikator | Von JS angewendete Klasse, um den geschlossenen Zustand zu erzwingen |
Grundlegende Verwendung
Ein verstecktes Kontrollkästchen steuert den Öffnungs-/Schließzustand. Der label löst es aus; Die collapsible-content div animiert zum Öffnen.
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> ) } |
Mit Pfeilanzeige
Hinzufügen collapsible-arrow auf das Etikett, um ein rotierendes Chevron zu erhalten, das den geöffneten/geschlossenen Zustand widerspiegelt.
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> |
Mehrere zusammenklappbare Geräte
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> |
Standardmäßig öffnen
Hinzufügen checked Klicken Sie auf die Kontrollkästcheneingabe, um das Bedienfeld zu öffnen.
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-gesteuert
Umschalten collapsible-open auf dem Wrapper-Element, anstatt ein Kontrollkästchen zu verwenden – nützlich, wenn der Trigger woanders lebt.
collapsible-open class.
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> |
Peek-Variante
collapsible-peek zeigt eine beschnittene Vorschau mit einer Verlaufsüberblendung und einem Überlagerungsauslöser. Überschreiben --peek-height um zu steuern, wie viel Inhalt im minimierten Zustand sichtbar ist.
Frutjam is a Tailwind CSS v4 component library built around a PostCSS plugin architecture. Every component is a set of @utility definitions that integrate natively with Tailwind's utility pipeline.
Theming is handled entirely through CSS custom properties. Swap themes by setting a data-theme attribute on any container, or override individual tokens inline.
Components ship with sensible defaults and are designed to compose cleanly.
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 & React Helper
Verwenden createCollapsible aus frutjam/js oder useCollapsible aus frutjam/react für programmatische Steuerung und Automatik aria-expanded Synchronisierung auf jedem Trigger.
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> </> ) } |
Externer Auslöser mit zusammenklappbarer Gruppe
Wickeln Sie einen Auslöser und eine zusammenklappbare Tasche ein collapsible-group Etiketten draußen lassen .collapsible auf seinen Öffnungs-/Geschlossen-Zustand reagieren is-collapsible-open Und is-collapsible-close.
.collapsible but inside .collapsible-group.
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> |
Verwenden Sie Claude Code, Cursor oder einen anderen KI-Editor?
Cherry MCP stellt Ihrem KI-Editor bei Bedarf die genauen Zusammenklappbar-Klassennamen und -Strukturen zur Verfügung. Keine halluzinierten Klassen mehr.