HTML / Element

details要素の使い方

HTMLのdetails要素は、追加の説明や操作項目を開いたり閉じたりできる、標準の開閉部品です。JavaScriptを使わなくても、ブラウザーの機能で操作できます。

先に結論

detailsの中に、開閉の見出しになるsummaryと、開いたときに見せる内容を書きます。

最初から開くならopenを付けます。内容を常に見せる必要がある場合や、タブ・メニューを作る場合には、detailsを使わないほうが分かりやすいことがあります。

最小例

<details>
  <summary>詳しい説明を見る</summary>
  <p>ここに追加の説明を書きます。</p>
</details>

summaryをクリックまたはキーボードで操作すると、その下の内容が表示・非表示になります。

HTMLの役割をもう少し見る

detailsは追加情報をまとめる部品です。開いていないときも、summaryの文字は見えます。

最初から開いておく

open属性を付けると、ページを開いた最初から内容を表示します。openはboolean属性なので、open="false"と書いても属性があるため開いた状態になります。閉じた状態にしたいときは、属性を省略します。

<details open>
  <summary>最初から表示する説明</summary>
  <p>ページを開いたときから見える内容です。</p>
</details>

summaryには短く分かりやすい名前を付ける

summaryは、閉じた状態でも利用者が内容を想像できる見出しにします。「詳しく見る」だけでなく、「送料と返品について」のように、何が開くのかを具体的に書くと読みやすくなります。

summarydetailsの最初の子要素に置きます。開閉に関係する見出しと、開いた後の内容を分けて書きましょう。

複数の項目を1つずつ開く

複数のdetailsに同じnameを付けると、同じグループの中で一度に1つだけ開く形にできます。複数の説明を同時に見たい場合は、nameを付けずに使います。

開閉部品とは

追加の情報を必要なときだけ表示するためのHTML部品です。

JavaScriptは必要?

単純な開閉だけなら必要ありません。開閉をきっかけに別の処理をする場合は、あとからJavaScriptを追加できます。

読みやすく、使いやすくするコツ

  • summaryだけで、開くと何が読めるか分かるようにする。
  • 重要な説明や必須の操作を、閉じた中だけに置かない。
  • キーボードでも開閉できることを確認する。
  • 見た目を変える前に、標準の開閉表示が内容を伝えられるか確認する。
  • タブ、メニュー、ダイアログなど、別の役割の部品に置き換えない。

よくある間違い

  • open="false"と書けば閉じると思う。boolean属性では、値ではなく属性の有無が状態を決めます。
  • summaryを省略して、開閉する内容だけを書く。ブラウザーが補助的な見出しを出すことはありますが、利用者に伝わる名前を自分で用意するほうが安全です。
  • CSSで非表示にした要素をクリックで開く仕組みを自作する。キーボード操作や状態の伝達まで考える必要があるため、まず標準のdetailsを検討します。

Atlasで詳しく確認する

content model、summaryの判定、opentogglenameによる排他的グループ、ブラウザー実装、アクセシビリティの確認範囲は、Yugien Atlasのdetails要素ページで詳しく整理しています。