[HTML] detailsとsummaryタグでアコーディオン(開閉)コンテンツを作る
htmlの <details>タグと <summary>タグ を使うと、JavaScript なしで手軽に開閉コンテンツ(アコーディオン)を作成できます。
details / summary タグとは
<details> タグはHTML5で導入された要素で、開閉可能なコンテンツを作成するためのタグです。
通常は子要素として <summary> タグを配置し、その内容が「見出し(キャプション)」として表示されます。
クリック(タップ)すると、詳細部分を表示・非表示できます。
details / summary を使うメリット・デメリット
JavaScript や jQuery を組み合わせて <dl>・<dt>・<dd> などで同様の開閉機能を作ることもできますが、details / summary を使うことで以下のような利点と注意点があります。
メリット
・セマンティクス(HTML構造として正しい)<details> は「詳細を開閉する要素」、<summary> は「開閉ボタン」という明確な意味を持ち、ブラウザやスクリーンリーダーに正しく伝わります。
・キーボード操作 & アクセシビリティに対応<summary>は Enter キー / Space キーで開閉可能。
「開いている」「閉じている」も支援技術に正しく認識されます。
・JavaScript なしでも動作
JavaScript / jQuery が無効な環境でも開閉機能が基本的にそのまま使えます。
(※ display: none; で非表示にしている場合は開閉できません)
デメリット
・<summary> のデフォルト三角アイコンの調整が必要
標準で表示される三角形アイコンを消したり、位置やデザインを変更する場合は CSS によるカスタマイズが必要です。
details / summary タグの基本的な使い方
See the Pen [HTML] details , summary by mkl may (@mkl-may) on CodePen.
summary タグを省略した場合
summary タグがない場合、独自のキャプションを指定できず、ブラウザによって「詳細」などの文言が自動で表示されます。
See the Pen [HTML] details , summaryなし by mkl may (@mkl-may) on CodePen.
初期状態で開いた状態にする
<details>タグに open 属性 を付けると、読み込み時に開いた状態で表示できます。
See the Pen [HTML] details , open属性付与 by mkl may (@mkl-may) on CodePen.
details / summary の CSS カスタマイズ
標準の三角アイコンを消す
summary の初期値は display: list-item; のため三角アイコンが表示されます。
display: block; など別の display を指定することで非表示にできます。
|
1 2 3 4 5 6 7 8 |
summary { display: block; } /* WebKitブラウザの標準の三角アイコンを消す */ summary::-webkit-details-marker { display: none; } |
独自アイコンへ変更する
デフォルト矢印を消した上で、疑似要素などを使って自作アイコンや画像を表示します。
See the Pen [HTML] details , アイコンカスタマイズ by mkl may (@mkl-may) on CodePen.
開閉アニメーションを付ける
iPhone の Safari や Chrome では、開閉のたびに毎回アニメーションが実行されることを確認しています。
一方、PCブラウザでは初回のみしかアニメーションしない場合があります。
確実に毎回アニメーションさせたい場合は、JavaScript を併用する必要があります。
See the Pen [HTML] details , animation by mkl may (@mkl-may) on CodePen.
完成形
See the Pen [HTML] details 完成形 by mkl may (@mkl-may) on CodePen.
details / summary タグ + jQuery でスムーズに開閉するアコーディオン
以下の記事では、details / summary の基本仕様を保ちながら、jQuery を追加してスムーズなアニメーションを実現する方法を紹介しています。
※jQuery が効かない環境でも、details / summary の標準開閉機能は動作します。
![MARKLEAPS[マークリープス]](https://markleaps.com/blog/wp-content/themes/mkl/images/00_logo.png)