---
title: "Collapsible"
type: component
version: "2.2.2"
doc_version: "2.7.3"
status: stable
date: 2026-07-05
library: Frutjam
stack: tailwind_css
compatibility: universal
framework_agnostic: true
runtime_requirement: none
description: "JS-free Tailwind CSS Collapsible using native details/summary. Accessible disclosure for FAQs, nested navigation, and expandable content sections."
url: https://frutjam.com/zh-hant/components/collapsible
---

# Collapsible Component

{% 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應用程式類別強制關閉狀態    |

## 基本用法

隱藏的複選框驅動開啟/關閉狀態。 `label` 觸發它; `collapsible-content` div 動畫開啟。

## 附箭頭指示器

將 `collapsible-arrow` 加到標籤以獲得反映開啟/關閉狀態的旋轉 V 形。

```html
<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>
```

## 多個折疊件

```html
<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` 新增至複選框輸入以開始開啟面板。

```html
<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`，而不是使用複選框——當觸發器位於其他地方時很有用。

```html
<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` 以控制折疊時可見的內容量。

```html
<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 助手

使用 `frutjam/js` 中的 `createCollapsible` 或 `frutjam/eact` 中的 `useCollapsible` 進行程式控制並在任何觸發器上自動同步 `aria-expanded`。

## 帶有可折疊組的外部觸發器

將觸發器和可折疊物件包裝在 `collapsible-group` 中，以使標籤位於 `.collapsible` 之外
 透過 is-collapsible-open 和 is-collapsible-close 回應其開啟/關閉狀態。

```html
<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>
```

