アコーディオン Accordion

クリックでセクションの展開/折りたたみを切り替えるコンテンツ。FAQ等で定番。

使用場面: FAQ、設定画面のセクション、長いコンテンツの整理 採用例: Apple Support, Stripe Docs

ライブデモ

クリックでコンテンツの表示/非表示を切り替えるUIコンポーネントです。情報を整理してスペースを節約できます。

FAQ、設定画面、長い説明文の整理など、多くの情報をコンパクトに表示したい場面で使用します。

はい、CSSカスタムプロパティやJavaScriptのオプションで自由にカスタマイズできます。

ソースコード

<div class="demo-accordion">
  <div class="demo-accordion-item open">
    <button class="demo-accordion-header" aria-expanded="true">
      <span>アコーディオンとは何ですか?</span>
      <span class="demo-accordion-icon">
        <svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><polyline points="6 9 12 15 18 9"/></svg>
      </span>
    </button>
    <div class="demo-accordion-body">
      <p>クリックでコンテンツの表示/非表示を切り替えるUIコンポーネントです。情報を整理してスペースを節約できます。</p>
    </div>
  </div>
  <div class="demo-accordion-item">
    <button class="demo-accordion-header" aria-expanded="false">
      <span>どんな場面で使いますか?</span>
      <span class="demo-accordion-icon">
        <svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><polyline points="6 9 12 15 18 9"/></svg>
      </span>
    </button>
    <div class="demo-accordion-body">
      <p>FAQ、設定画面、長い説明文の整理など、多くの情報をコンパクトに表示したい場面で使用します。</p>
    </div>
  </div>
  <div class="demo-accordion-item">
    <button class="demo-accordion-header" aria-expanded="false">
      <span>カスタマイズできますか?</span>
      <span class="demo-accordion-icon">
        <svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><polyline points="6 9 12 15 18 9"/></svg>
      </span>
    </button>
    <div class="demo-accordion-body">
      <p>はい、CSSカスタムプロパティやJavaScriptのオプションで自由にカスタマイズできます。</p>
    </div>
  </div>
</div>
.demo-accordion { min-height: 320px; max-width: 480px; border: 1px solid #e5e7eb; border-radius: 12px; overflow: hidden; }
.demo-accordion-item + .demo-accordion-item { border-top: 1px solid #e5e7eb; }
.demo-accordion-header {
  display: flex; align-items: center; justify-content: space-between;
  width: 100%; padding: 14px 18px; border: none; background: none;
  font-size: 14px; font-weight: 600; color: #333; cursor: pointer;
  text-align: left;
}
.demo-accordion-header:hover { color: var(--ui-primary); }
.demo-accordion-icon { transition: transform 0.3s; color: #999; flex-shrink: 0; }
.demo-accordion-item.open .demo-accordion-icon { transform: rotate(180deg); color: var(--ui-primary); }
.demo-accordion-body {
  max-height: 0; overflow: hidden; transition: max-height 0.3s ease-out;
}
.demo-accordion-item.open .demo-accordion-body { max-height: 200px; }
.demo-accordion-body p {
  padding: 0 18px 14px; margin: 0; font-size: 13px; color: #666; line-height: 1.6;
}
document.querySelectorAll('.demo-accordion-header').forEach(header => {
  header.addEventListener('click', function() {
    const item = this.closest('.demo-accordion-item');
    const isOpen = item.classList.contains('open');
    // Close all (single-open mode)
    document.querySelectorAll('.demo-accordion-item').forEach(i => {
      i.classList.remove('open');
      i.querySelector('.demo-accordion-header').setAttribute('aria-expanded', 'false');
    });
    if (!isOpen) {
      item.classList.add('open');
      this.setAttribute('aria-expanded', 'true');
    }
  });
});

AIプロンプト

Basic
アコーディオンをHTML/CSS/JSで作ってください。クリックでセクションが展開/折りたたみされるUIです。
Custom
以下の仕様でアコーディオンを実装してください。
- スムーズな展開/折りたたみアニメーション
- プライマリカラー: #2563eb
- 矢印アイコンの回転アニメーション
- ボーダー + 角丸デザイン
- 単一展開モード(1つ開くと他が閉じる)
- アクティブ時のヘッダー色変更
Advanced
アクセシビリティ対応のアコーディオンを実装してください。
- <details>/<summary> または aria-expanded + aria-controls
- キーボード操作(Enter/Space展開、上下キー移動、Home/End)
- aria-disabled で無効化項目
- 複数展開/単一展開の切り替え
- アニメーションはmax-heightではなくgrid-template-rowsで滑らかに
- prefers-reduced-motion 対応
- ネストされたアコーディオン対応
- 動的にアイテムを追加/削除
- ディープリンク(URLハッシュで特定セクションを開く)