Disclosure

Accordion for stacked disclosures

The Accordion component composes triggers and panels so you can ship stacked disclosures in React apps. Pair it with Tailwind spacing tokens in Next.js layouts for predictable rhythm.

Standard delivery in 3-5 business days. Express options at checkout.

Examples

Toggle between the live accordion and JSX using the same controls as other component previews.


Content for the first item.

Accordion variants examples

Use Show output / Show code on each row. Snippets start with a Variant line naming the axis and token.


Appearance: DEFAULT

Content for the first item.


Appearance: OUTLINE

Content for the first item.


Appearance: GHOST

Content for the first item.


Appearance: CARD

Content for the first item.


Appearance: SEPARATED

Content for the first item.


Appearance: SKY

Content for the first item.


Appearance: ROSE

Content for the first item.


Appearance: PURPLE

Content for the first item.


Appearance: PINK

Content for the first item.


Appearance: ORANGE

Content for the first item.


Appearance: YELLOW

Content for the first item.


Appearance: TEAL

Content for the first item.


Appearance: INDIGO

Content for the first item.


Appearance: EMERALD

Content for the first item.


Appearance: GRADIENT-BLUE

Content for the first item.


Appearance: GRADIENT-GREEN

Content for the first item.


Appearance: GRADIENT-RED

Content for the first item.


Appearance: GRADIENT-YELLOW

Content for the first item.


Appearance: GRADIENT-PURPLE

Content for the first item.


Appearance: GRADIENT-TEAL

Content for the first item.


Appearance: GRADIENT-INDIGO

Content for the first item.


Appearance: GRADIENT-PINK

Content for the first item.


Appearance: GRADIENT-ORANGE

Content for the first item.


Size: SM

Content for the first item.


Size: MD

Content for the first item.


Size: LG

Content for the first item.


Type: Single

Content for the first item.


Type: Multiple

Content for the first item.


Transition: NONE

Content for the first item.


Transition: DEFAULT

Content for the first item.


Transition: SMOOTH

Content for the first item.


Transition: SLOW

Content for the first item.

CSS variable overrides

Accordion CSS variables

Override these accordion variables on :root, a theme selector, or a component wrapper.

168 variables

Pattern: --zui-<component>-<slot?>-<variant?>-<property>-<state?>-dark?

:root {
  --zui-accordion-default-divider: #0000001a;
  --zui-accordion-default-border: #0000001a;
  --zui-accordion-outline-divider: #0000001a;
  --zui-accordion-outline-border: #00000026;
  --zui-accordion-ghost-divider: #0000000d;
  --zui-accordion-sky-divider: oklch(44.3% 0.11 240.79);
  --zui-accordion-sky-border: oklch(44.3% 0.11 240.79);
  --zui-accordion-rose-divider: oklch(45.5% 0.188 13.697);
  --zui-accordion-rose-border: oklch(45.5% 0.188 13.697);
  --zui-accordion-purple-divider: oklch(43.8% 0.218 303.724);
  --zui-accordion-purple-border: oklch(43.8% 0.218 303.724);
  --zui-accordion-pink-divider: oklch(45.9% 0.187 3.815);
  --zui-accordion-pink-border: oklch(45.9% 0.187 3.815);
  --zui-accordion-orange-divider: oklch(47% 0.157 37.304);
  --zui-accordion-orange-border: oklch(47% 0.157 37.304);
  --zui-accordion-yellow-divider: oklch(47.6% 0.114 61.907);
  --zui-accordion-yellow-border: oklch(47.6% 0.114 61.907);
  --zui-accordion-teal-divider: oklch(43.7% 0.078 188.216);
  --zui-accordion-teal-border: oklch(43.7% 0.078 188.216);
  --zui-accordion-indigo-divider: oklch(39.8% 0.195 277.366);
  --zui-accordion-indigo-border: oklch(39.8% 0.195 277.366);
  --zui-accordion-emerald-divider: oklch(43.2% 0.095 166.913);
  --zui-accordion-emerald-border: oklch(43.2% 0.095 166.913);
  --zui-accordion-gradient-blue-divider: oklch(42.4% 0.199 265.638);
  --zui-accordion-gradient-blue-border: oklch(42.4% 0.199 265.638);
  --zui-accordion-gradient-green-divider: oklch(44.8% 0.119 151.328);
  --zui-accordion-gradient-green-border: oklch(44.8% 0.119 151.328);
  --zui-accordion-gradient-red-divider: oklch(44.4% 0.177 26.899);
  --zui-accordion-gradient-red-border: oklch(44.4% 0.177 26.899);
  --zui-accordion-gradient-yellow-divider: oklch(47.6% 0.114 61.907);
  --zui-accordion-gradient-yellow-border: oklch(47.6% 0.114 61.907);
  --zui-accordion-gradient-purple-divider: oklch(43.8% 0.218 303.724);
  --zui-accordion-gradient-purple-border: oklch(43.8% 0.218 303.724);
  --zui-accordion-gradient-teal-divider: oklch(43.7% 0.078 188.216);
  --zui-accordion-gradient-teal-border: oklch(43.7% 0.078 188.216);
  --zui-accordion-gradient-indigo-divider: oklch(39.8% 0.195 277.366);
  --zui-accordion-gradient-indigo-border: oklch(39.8% 0.195 277.366);
  --zui-accordion-gradient-pink-divider: oklch(45.9% 0.187 3.815);
  --zui-accordion-gradient-pink-border: oklch(45.9% 0.187 3.815);
  --zui-accordion-gradient-orange-divider: oklch(47% 0.157 37.304);
  --zui-accordion-gradient-orange-border: oklch(47% 0.157 37.304);
  --zui-accordion-item-fg: oklch(20.8% 0.042 265.755);
  --zui-accordion-item-card-border: #0000001a;
  --zui-accordion-item-card-bg: #0000000d;
  --zui-accordion-item-separated-border: #0000001a;
  --zui-accordion-item-separated-bg: oklch(98.4% 0.003 247.858 / 0.4);
  --zui-accordion-item-sky-border: oklch(44.3% 0.11 240.79);
  --zui-accordion-item-sky-bg: oklch(95.1% 0.026 236.824 / 0.5);
  --zui-accordion-item-rose-border: oklch(45.5% 0.188 13.697);
  --zui-accordion-item-rose-bg: oklch(94.1% 0.03 12.58 / 0.5);
  --zui-accordion-item-purple-border: oklch(43.8% 0.218 303.724);
  --zui-accordion-item-purple-bg: oklch(94.6% 0.033 307.174 / 0.5);
  --zui-accordion-item-pink-border: oklch(45.9% 0.187 3.815);
  --zui-accordion-item-pink-bg: oklch(94.8% 0.028 342.258 / 0.5);
  --zui-accordion-item-orange-border: oklch(47% 0.157 37.304);
  --zui-accordion-item-orange-bg: oklch(95.4% 0.038 75.164 / 0.5);
  --zui-accordion-item-yellow-border: oklch(47.6% 0.114 61.907);
  --zui-accordion-item-yellow-bg: oklch(97.3% 0.071 103.193 / 0.5);
  --zui-accordion-item-teal-border: oklch(43.7% 0.078 188.216);
  --zui-accordion-item-teal-bg: oklch(95.3% 0.051 180.801 / 0.5);
  --zui-accordion-item-indigo-border: oklch(39.8% 0.195 277.366);
  --zui-accordion-item-indigo-bg: oklch(93% 0.034 272.788 / 0.5);
  --zui-accordion-item-emerald-border: oklch(43.2% 0.095 166.913);
  --zui-accordion-item-emerald-bg: oklch(95% 0.052 163.051 / 0.5);
  --zui-accordion-item-gradient-blue-from: oklch(80.9% 0.105 251.813);
  --zui-accordion-item-gradient-blue-to: oklch(82.7% 0.119 306.383);
  --zui-accordion-item-gradient-green-from: oklch(87.1% 0.15 154.449);
  --zui-accordion-item-gradient-green-to: oklch(89.7% 0.196 126.665);
  --zui-accordion-item-gradient-red-from: oklch(80.8% 0.114 19.571);
  --zui-accordion-item-gradient-red-to: oklch(82.3% 0.12 346.018);
  --zui-accordion-item-gradient-yellow-from: oklch(90.5% 0.182 98.111);
  --zui-accordion-item-gradient-yellow-to: oklch(83.7% 0.128 66.29);
  --zui-accordion-item-gradient-purple-from: oklch(82.7% 0.119 306.383);
  --zui-accordion-item-gradient-purple-to: oklch(82.3% 0.12 346.018);
  --zui-accordion-item-gradient-teal-from: oklch(85.5% 0.138 181.071);
  --zui-accordion-item-gradient-teal-to: oklch(86.5% 0.127 207.078);
  --zui-accordion-item-gradient-indigo-from: oklch(78.5% 0.115 274.713);
  --zui-accordion-item-gradient-indigo-to: oklch(82.7% 0.119 306.383);
  --zui-accordion-item-gradient-pink-from: oklch(82.3% 0.12 346.018);
  --zui-accordion-item-gradient-pink-to: oklch(81% 0.117 11.638);
  --zui-accordion-item-gradient-orange-from: oklch(83.7% 0.128 66.29);
  --zui-accordion-item-gradient-orange-to: oklch(80.8% 0.114 19.571);
  --zui-accordion-trigger-fg: oklch(27.9% 0.041 260.031);
  --zui-accordion-trigger-fg-hover: oklch(20.8% 0.042 265.755);
  --zui-accordion-trigger-ring-focus: #0000004d;
}

/* Dark theme variables follow the same names with -dark appended. */
.dark {
  --zui-accordion-default-divider-dark: #ffffff1a;
  --zui-accordion-default-border-dark: #ffffff1a;
  /* ...same variables with -dark at the end */
}

What it does

Each item manages its own open state while sharing motion presets for expand and collapse.

Use semantic buttons for triggers so screen readers expose the expanded/collapsed state clearly.

Composition and API

Prefer compound subcomponents instead of one oversized prop bag. Export a small, documented API for your design system.

Forward refs where you attach measurements or analytics. Avoid nesting interactive controls inside triggers.

Common use cases

  • FAQ pages that keep SEO-friendly headings while hiding verbose answers.
  • Settings screens that group advanced options per section.
  • Docs sites that reveal code samples on demand.
  • Mobile-first navigation stacks with limited vertical space.

Accessibility

Keyboard order, focus rings, and ARIA attributes should match production usage. Test with your supported browsers and assistive technologies when semantics are non-trivial.

This preview page exposes a single h1 in the hero for a clean outline.

Next.js integration notes

Colocate examples under the App Router, keep server and client boundaries explicit, and avoid pulling interactive overlays into unexpected server layouts.

Set NEXT_PUBLIC_SITE_URL so canonical and Open Graph URLs resolve on deploy.

FAQ

Does the Accordion component work with Next.js App Router?

Yes. Import it like any other React component; keep interactive subtrees in client components when you need hooks or browser APIs, and leave static structure in server components where possible.

Can I customize accordion with Tailwind CSS?

Zentauri UI exposes class-friendly variants and slots so you can extend styles with Tailwind utilities without fighting inline styles.

Is this Accordion implementation accessible by default?

Primitives follow sensible defaults, but accessibility depends on how you label controls, manage focus, and wire keyboard handlers in your app. Validate critical flows with keyboard-only use and screen readers.