アコーディオンはJSで作らず、HTMLの <details> と <summary> で開閉させ、矢印はCSSで付ける
<details> は標準で開閉とキーボード操作に対応する。name 属性を揃えると「1つ開くと他が閉じる」も書ける。
どんな問題を解決するか / いつ使うか
FAQやメニューの開閉をJavaScriptで作り込むと、コードが増え、キーボード操作や読み上げへの対応も漏れやすい。AIに作らせるとJSで書きがちな部品。
やり方
html
<details class="faq" name="faq">
<summary>送料はかかりますか?</summary>
<p>5,000円以上で無料です。</p>
</details>
<details class="faq" name="faq">
<summary>返品できますか?</summary>
<p>到着後7日以内なら可能です。</p>
</details>css
.faq summary {
list-style: none; /* 既定の三角を消す */
cursor: pointer;
display: flex; justify-content: space-between;
}
.faq summary::-webkit-details-marker { display: none; }
.faq summary::after {
content: "";
width: .6em; height: .6em;
border-right: 2px solid; border-bottom: 2px solid;
rotate: 45deg;
transition: rotate .2s;
}
.faq[open] summary::after { rotate: -135deg; }- 同じ
nameを付けた<details>は、1つ開くと他が自動で閉じる(排他的アコーディオン)。
注意点
- 開閉のなめらかなアニメーションまで付けたい場合は、
::details-contentやinterpolate-sizeが使えるブラウザに限られる。付かなくても開閉自体は動く。 - ルールファイルに「アコーディオンは details/summary、モーダルは dialog」と書いておくとAIが従いやすい(モーダルはJSで開閉を作り込まず、HTMLの <dialog> 要素を使う)。
- コード例は一般的な書き方で補ったもの(元の投稿はテキストのみ)。
出典
- 投稿者: @wokobo_net
- 投稿: @wokobo_net · 2026-10-14
- 収集日: 2026-10-16(JST、10/15・10/16分の巡回をまとめて実施)