• HOME > 
  • HTML > 
  • HTMLのdetailsとsummaryでアコーディオン機能...

HTMLのdetailsとsummaryでアコーディオン機能を作る

投稿日:

このページにはGoogleアドセンス広告とアフィリエイト広告が含まれています。

カテゴリー記事のアイキャッチ画像

本記事は執筆時点(2025年02月06日)の情報をベースにしております。掲載している情報が最新ではない可能性がありますので何卒ご容赦ください。

広告
広告

details要素を使えばHTMLだけでアコーディオン機能を実装できることを知ったので、summary要素も含めた使い方を備忘録としてまとめます。

detailsタグとsummaryタグとは?

HTMLのdetailsタグは、コンテンツをアコーディオンのように折りたたんで表示させることができる要素です。

detailsは「詳細」、summaryとは「要約」を意味し、ユーザーはsummaryタグをクリックすることで折りたたんだ詳細部分の表示・非表示を自由に切り替えることができます。

アコーディオンメニューやFAQ(よくある質問)の作成に利用されることが多いです。

アコーディオンメニューの例

コンテンツをアコーディオン形式で設置することで、ページを見やすく整理でき、ユーザーが求める情報を探しやすくなります。

アコーディオン機能はHTMLのinput要素やJavaScriptを使っても作ることができますが、details要素を用いる方法が一番手軽に実装できると思います。

input要素のチェックボックスを利用してアコーディオン機能を実装する方法についてはこちらのページにまとめています。

detailsとsummaryの使い方

details要素は下記のようにsummaryを子要素に入れて使用することで、summary要素以降に記述した内容の表示・非表示を切り替えます。

detailsとsummaryの使い方

summaryには基本的には折りたたんだ内容の「要約・見出し」を記述します。summary以降の部分には、テキストでもリストでも入れることが可能です。

下記はdetailsとsummaryの他、最低限のスタイル記述のみを施したアコーディオン表示の例です。

なお、矢印アイコンはCSSを書かなくてもdetails要素に付随して自動的に表示されます(開閉状態に応じて矢印の向きも切り替わる)。

HTML

<details>
    <summary>見出しタイトル</summary>
    <h2>コンテンツ名</h2>
    <p>ここにコンテンツを記載します。ここにコンテンツを記載します。ここにコンテンツを記載します。ここにコンテンツを記載します。</p>
</details>

CSS

summary{
    font-weight: bold;
    font-size:24px;
    background-color:#a0a0a0;
    padding:.5em;
}
summary:hover{
    cursor:pointer;
}
details h2{
    font-size:18px;
    color:#144da0;
    border-left: solid 5px;
    padding-left:10px;
    margin-bottom: 5px;
}
details p{
    background-color: #f0f0f0;
    padding:1em;
    font-size:14px;
}

summary要素で設置した「見出しタイトル」をクリックする度にh2要素p要素の表示・非表示が切り替わります。

プレビュー

detailsとsummaryで作るシンプルなアコーディオン表示の例

summaryを設置しない場合

detailsはsummaryを置かない単体の状態でもアコーディオンとして機能します。

その場合は下図のように「詳細」というテキストが表示されます。

summaryを設置しない場合の例

詳細部分をはじめから開いた状態にする

detailsによるアコーディオンは初期状態では閉じた形で設置されますが、details要素にopen属性を追加するとdetailsをはじめから開いた状態で設置することができます。

もちろんアコーディオンの機能はそのままなので、summaryをクリックすれば閉じることができます。

HTML

<details open>
    -省略-
</details>

表示されるデフォルトの三角形を変更する

開閉状態と連動する三角形のアイコンは疑似要素によって表示されているので、CSSで任意のアイコンに変更したり、非表示にすることが可能です。

閉じた状態のセレクターは「details > summary:first-of-type」、開いた状態のセレクターは「details[open] > summary:first-of-type」を使ってそれぞれ指定できます。

下記は、Font awesomeのアイコンに変更した例です。

CSS

details > summary:first-of-type{
    list-style-type:"\f13a";
    font-family:"Font awesome 5 free";
    font-weight:bold;
}
details[open] > summary:first-of-type{
    list-style-type:"\f139";
}
三角形のアイコンを変更した例

アイコンを非表示にしたい場合は「display:none」などを用います。

Safariでだけ三角形が非表示にできないとき

上記の方法でアイコンを変更しても、Safariだけ別に三角形のアイコンが表示されることがあります。

そのようなケースでは下記を追記すれば非表示にできます。

CSS

summary::-webkit-details-marker{
    display:none;
}

まとめ

以上が、HTMLのdetailsとsummaryでアコーディオン機能を作る方法です。

チェックボックスやJavaScriptを駆使して作るよりも素早く簡潔にアコーディオン機能を実装できると思うので是非サイトに導入してみてください。

広告
広告

関連する記事

サムネイル

HTMLのpicture要素とsourceタグの使い方【レス……

2024年11月07日
picture要素を使った画像の表示について備忘録としてまとめます。 picture要素とは? HTMLのpicture要素は、様々な画面サイズやブラウザに合わ […]
サムネイル

video要素とsource要素で画面サイズに応じて読み込む……

2024年09月19日
最終更新日:2024年11月07日
HTMLのsource要素とは? HTMLのsource要素は、video要素やpicture要素の子要素として複数のメディアソースを指定したいときに使う要素で […]
サムネイル

HTMLのテキストボックスにクリアボタンを実装【inputの……

2024年09月04日
inputのtype属性を「search」にすれば自動的にクリアボタンが表示されます。簡単ですがデザインはブラウザに依存しておりカスタマイズはできません。JSを使って処理を自作する方法は、HTML・CSS・JSに関するある程度の知識が必要ですが、自由にカスタマイズできます。
サムネイル

HTMLのinputのdateで日付の入力欄を作る【初期値や……

2023年10月01日
最終更新日:2023年09月28日
HTMLのinputタグのtype属性にdateを指定すると、フォームなどに日付の入力欄を設置することができます。
サムネイル

ブラウザキャッシュを回避するCache Bustingの方法……

2023年09月01日
Cache Busting(キャッシュバスティング)とはキャッシュを利用せずに読み込みするように指定することです。
サムネイル

HTMLのdatalistタグの使い方【文字入力とプルダウン……

2023年08月08日
HTMLのdatalistは、テキストボックスとセレクトボックスを組み合わせたような入力欄を作ることができるタグです。一見普通のテキストボックスですが、クリックすると用意した入力候補が表示されます。