Accordion

Accordionは、コンテンツを折りたたみ式のパネルに分割して表示するコンポーネントです。3つのバリアントと3つのサイズで、FAQやヘルプセクションなどさまざまな用途に対応します。

3
Variants
3
Sizes
2
Expand Mode
Radix
Base

Playground

Preview
D

A design system is a collection of reusable components and guidelines for building consistent user interfaces.

Variant
Size
Type
Options
<Accordion defaultValue="item-1">
  <Accordion.Item value="item-1">
    <Accordion.Trigger>What is a design system?</Accordion.Trigger>
    <Accordion.Content>A design system is a collection of reusable components and guidelines for building consistent user interfaces.</Accordion.Content>
  </Accordion.Item>
  <Accordion.Item value="item-2">
    <Accordion.Trigger>How to install?</Accordion.Trigger>
    <Accordion.Content>Install the package using npm or yarn, then import components as needed.</Accordion.Content>
  </Accordion.Item>
  <Accordion.Item value="item-3">
    <Accordion.Trigger>Is it accessible?</Accordion.Trigger>
    <Accordion.Content>Yes, all components follow WAI-ARIA guidelines with full keyboard navigation support.</Accordion.Content>
  </Accordion.Item>
</Accordion>

Variants

default

Content for item 1

<Accordion defaultValue="item-1">
  <Accordion.Item value="item-1">
    <Accordion.Trigger>Item 1</Accordion.Trigger>
    <Accordion.Content>Content for item 1</Accordion.Content>
  </Accordion.Item>
  <Accordion.Item value="item-2">
    <Accordion.Trigger>Item 2</Accordion.Trigger>
    <Accordion.Content>Content for item 2</Accordion.Content>
  </Accordion.Item>
  <Accordion.Item value="item-3">
    <Accordion.Trigger>Item 3</Accordion.Trigger>
    <Accordion.Content>Content for item 3</Accordion.Content>
  </Accordion.Item>
</Accordion>

bordered

Content for item 1

<Accordion variant="bordered" defaultValue="item-1">
  <Accordion.Item value="item-1">
    <Accordion.Trigger>Item 1</Accordion.Trigger>
    <Accordion.Content>Content for item 1</Accordion.Content>
  </Accordion.Item>
  <Accordion.Item value="item-2">
    <Accordion.Trigger>Item 2</Accordion.Trigger>
    <Accordion.Content>Content for item 2</Accordion.Content>
  </Accordion.Item>
  <Accordion.Item value="item-3">
    <Accordion.Trigger>Item 3</Accordion.Trigger>
    <Accordion.Content>Content for item 3</Accordion.Content>
  </Accordion.Item>
</Accordion>

splitted

Content for item 1

<Accordion variant="splitted" defaultValue="item-1">
  <Accordion.Item value="item-1">
    <Accordion.Trigger>Item 1</Accordion.Trigger>
    <Accordion.Content>Content for item 1</Accordion.Content>
  </Accordion.Item>
  <Accordion.Item value="item-2">
    <Accordion.Trigger>Item 2</Accordion.Trigger>
    <Accordion.Content>Content for item 2</Accordion.Content>
  </Accordion.Item>
  <Accordion.Item value="item-3">
    <Accordion.Trigger>Item 3</Accordion.Trigger>
    <Accordion.Content>Content for item 3</Accordion.Content>
  </Accordion.Item>
</Accordion>

Sizes

sm
パディング12px 16px
フォント13px
default
パディング16px 16px
フォント14px
lg
パディング20px 24px
フォント16px

Features

Expand Mode

singleは1つだけ展開、multipleは複数同時に展開できます。

Single (default)

Only one open at a time

<Accordion defaultValue="item-1">
  <Accordion.Item value="item-1">
    <Accordion.Trigger>Single 1</Accordion.Trigger>
    <Accordion.Content>Only one open at a time</Accordion.Content>
  </Accordion.Item>
  <Accordion.Item value="item-2">
    <Accordion.Trigger>Single 2</Accordion.Trigger>
    <Accordion.Content>Previous item closes automatically</Accordion.Content>
  </Accordion.Item>
</Accordion>

Multiple

Multiple items can be open

All items open independently
<Accordion type="multiple" defaultValue={["item-1", "item-2"]}>
  <Accordion.Item value="item-1">
    <Accordion.Trigger>Multiple 1</Accordion.Trigger>
    <Accordion.Content>Multiple items can be open</Accordion.Content>
  </Accordion.Item>
  <Accordion.Item value="item-2">
    <Accordion.Trigger>Multiple 2</Accordion.Trigger>
    <Accordion.Content>All items open independently</Accordion.Content>
  </Accordion.Item>
</Accordion>

Collapsible

collapsibleがtrue(デフォルト)の場合、開いているアイテムをクリックして閉じることができます。falseにすると、常に1つのアイテムが展開された状態を維持します。

This accordion always keeps one item open.

<Accordion collapsible={false} defaultValue="item-1">
  <Accordion.Item value="item-1">
    <Accordion.Trigger>Always one open</Accordion.Trigger>
    <Accordion.Content>This accordion always keeps one item open.</Accordion.Content>
  </Accordion.Item>
  <Accordion.Item value="item-2">
    <Accordion.Trigger>Try closing me</Accordion.Trigger>
    <Accordion.Content>You cannot close all items.</Accordion.Content>
  </Accordion.Item>
</Accordion>

Icon Position

Right (default)

Icon on the right side
<Accordion defaultValue="item-1">
  <Accordion.Item value="item-1">
    <Accordion.Trigger>Right icon (default)</Accordion.Trigger>
    <Accordion.Content>Icon on the right side</Accordion.Content>
  </Accordion.Item>
</Accordion>

Left

Icon on the left side
<Accordion iconPosition="left" defaultValue="item-1">
  <Accordion.Item value="item-1">
    <Accordion.Trigger>Left icon</Accordion.Trigger>
    <Accordion.Content>Icon on the left side</Accordion.Content>
  </Accordion.Item>
</Accordion>

Disabled

This item is active

<Accordion defaultValue="item-1">
  <Accordion.Item value="item-1">
    <Accordion.Trigger>Active item</Accordion.Trigger>
    <Accordion.Content>This item is active</Accordion.Content>
  </Accordion.Item>
  <Accordion.Item value="item-2" disabled>
    <Accordion.Trigger>Disabled item</Accordion.Trigger>
    <Accordion.Content>This item is disabled</Accordion.Content>
  </Accordion.Item>
  <Accordion.Item value="item-3">
    <Accordion.Trigger>Active item</Accordion.Trigger>
    <Accordion.Content>This item is also active</Accordion.Content>
  </Accordion.Item>
</Accordion>

API

Component Structure

Accordion— Radix Accordion
.ItemProps.TriggerProps.Content

Props

Accordion (Root)

type"single"
"single" | "multiple"

展開モード(singleは1つだけ、multipleは複数同時)

collapsibletrue
boolean

すべてのアイテムを閉じることを許可(single モード)

variant"default"
"default" | "bordered" | "splitted"

ビジュアルスタイル

size"default"
"sm" | "default" | "lg"

トリガーとコンテンツのサイズ

iconPosition"right"
"left" | "right"

インジケーターアイコンの位置

defaultValueundefined
string | string[]

デフォルトで展開するアイテム(非制御モード)

valueundefined
string | string[]

展開中のアイテム(制御モード)

onValueChangeundefined
(value: string | string[]) => void

展開状態変更時のコールバック

disabledundefined
boolean

全アイテムを無効化

Accordion.Item

value
string

アイテムの一意な識別値(必須)

disabledundefined
boolean

このアイテムを無効化

Accordion.Trigger

iconbuilt-in SVG (ChevronDown)
ReactNode

カスタムインジケーターアイコン

Customization

Accordion.Triggerのicon propでインジケーターアイコンを自由にカスタマイズできます。

Plus / Minus アイコン

You can return any item within 30 days of purchase.

import { Plus, Minus } from 'lucide-react' <Accordion.Trigger icon={ <> <Plus className="icon-sm shrink-0 text-text-muted group-data-[state=open]:hidden" /> <Minus className="icon-sm shrink-0 text-text-muted hidden group-data-[state=open]:block" /> </> } > Question text </Accordion.Trigger>

ChevronRight(90°回転)

Follow the installation guide to begin.

import { ChevronRight } from 'lucide-react' <Accordion.Trigger icon={ <ChevronRight className="icon-sm shrink-0 text-text-muted transition-transform duration-normal accordion-chevron" /> } > Item text </Accordion.Trigger>

Tip: カスタムアイコンにaccordion-chevronクラスを追加すると、内蔵アイコンと同じ180°回転アニメーションが適用されます。

Anatomy

1
2
3
Frequently asked questions
4
5
Pricing plans
Trigger padding16px
Content padding0 16px 16px
Iconicon-sm
1
Root
ルートコンテナ
2
Item
折りたたみセクション
3
Trigger
ヘッダーボタン
4
Chevron
開閉アイコン
5
Content
展開コンテンツ

Best Practices

推奨

  • FAQやヘルプセクションに使用する
  • 関連するコンテンツをグループ化する
  • 最も重要な項目をデフォルトで展開する
  • ラベルは簡潔で内容を予測できるものにする

避けるべき

  • アコーディオン内に別のアコーディオンをネストしない
  • 必ず表示すべき重要な情報を隠さない
  • 項目数を多くしすぎない(7個以下推奨)
  • 短いコンテンツに不要な折りたたみを使用しない

Accessibility

キーボード操作

Enter / Spaceフォーカス中のアイテムを開閉
Tab次のフォーカス可能な要素へ移動
Arrow Down次のトリガーにフォーカス移動
Arrow Up前のトリガーにフォーカス移動
Home最初のトリガーにフォーカス移動
End最後のトリガーにフォーカス移動

ARIA / WCAG

  • role="region" コンテンツに aria-labelledby 付与
  • aria-expanded トリガーの展開状態を自動表示
  • aria-controls トリガーとコンテンツをリンク
  • disabled アイテムはキーボードナビゲーションでスキップ