コピペで完結!アコーディオン(CSS+HTMLのみ/JS不要)
ネイティブの<details>
/ <summary>
を使って、JavaScriptなしでアコーディオンを実装します。開閉状態は[open]
属性で検出し、+/−のアイコンもCSSだけで切り替え。アクセシビリティも良好です。
コードについて
本記事のコードは AI(ChatGPT)による生成をベースに作成・調整しています。ご利用の環境でテストの上ご使用ください。
免責 本コードの利用に伴う不具合・損害について、当サイトは責任を負いません。自己責任にてご利用ください。
免責 本コードの利用に伴う不具合・損害について、当サイトは責任を負いません。自己責任にてご利用ください。
デモ
よくある質問 1:料金は?
基本プランは月額1,000円です。年払いで2ヶ月分お得になります。
よくある質問 2:解約はいつでも?
マイページからいつでも解約できます。日割りはありません。
よくある質問 3:サポートは?
メール・チャットの2チャネルで平日10:00〜18:00に対応しております。
コードをコピーして使おう!
/* =========================================================
CSS+HTMLだけで作るアコーディオン(コメント付き)
- #acc-cssonly-1 にスコープしてテーマ干渉を低減
- details / summary を使うので JS不要・[open] で開閉把握
========================================================= */
#acc-cssonly-1{
--radius:12px; --border:#e5e7eb; --ink:#0f172a; --bg:#fff;
}
/* アイテム外枠(カード風) */
#acc-cssonly-1 .acc-item{
border:1px solid var(--border);
border-radius:var(--radius);
background:var(--bg);
margin:12px 0;
overflow:hidden; /* 角丸と中身を揃える */
}
/* 見出しsummary:左右にタイトルとアイコンを配置 */
#acc-cssonly-1 .acc-btn{
list-style:none; /* 既定の三角を消す */
cursor:pointer;
display:flex; align-items:center; justify-content:space-between;
gap:12px; padding:14px 16px; color:var(--ink);
font:inherit; line-height:1.4; user-select:none;
}
/* Safari等のデフォルトマーカー非表示 */
#acc-cssonly-1 .acc-btn::-webkit-details-marker{ display:none }
/* タイトルを少し太く */
#acc-cssonly-1 .acc-title{ font-weight:600 }
/* 右端の+アイコン(擬似要素で描画) */
#acc-cssonly-1 .acc-btn::after{
content:'+';
font-weight:700;
}
/* open時は−へ切替 */
#acc-cssonly-1 .acc-item[open] .acc-btn::after{
content:'-';
}
/* ホバー&フォーカス可視化 */
#acc-cssonly-1 .acc-btn:hover{ background:#f8fafc }
#acc-cssonly-1 .acc-btn:focus{ outline:none }
#acc-cssonly-1 .acc-btn:focus-visible{ outline:2px solid #93c5fd; outline-offset:2px }
/* 本文:gridで0→1frにしてアコーディオン的に展開アニメ */
#acc-cssonly-1 .acc-panel{
padding:12px 16px; border-top:1px solid var(--border); color:var(--ink);
display:grid; grid-template-rows:0fr; transition:grid-template-rows .24s ease;
}
#acc-cssonly-1 .acc-panel > *{ overflow:hidden }
#acc-cssonly-1 .acc-item[open] .acc-panel{ grid-template-rows:1fr }
コメント