仕様

DATAILS要素は、
ユーザーが追加情報
またはコントロールを取得できる
開示ウィジェットを表します。

details開示操作 (disclosure widget)
カテゴリ
  • フローコンテンツ
  • インタラクティブコンテンツ
  • パルパブルコンテンツ
  • セクショニング・ルート
種類通常要素
この要素を
使用できる
状態
フローコンテンツを受け入れる要素。
許可されて
いる内容
1つの summary要素とそれに続くフローコンテンツ
属性グローバル属性,
open
text / html
での
タグの省略
省略できません。
許可されて
いるARIA
なし[既定値 : group]
DOM
インター
フェイス
HTMLDetailsElement
レンダリング
ウィジェット
  1. details {
  2. display: block;
  3. }

CSS を大雑把に読むと、 フローレイアウトに配置されたときにブロックレベルのボックスを生成します。 などになります。

参加
コンテキスト
ブロックフォーマットコンテキスト
確立
コンテキスト
ブロックフォーマットコンテキスト
details要素は、追加情報を表します。

summary要素で、要約を表します。open属性が存在する場合は、要約と追加情報の両方がユーザーに初期表示されることを示します。存在しない場合は、要約のみが初期表示されます。

  1. <div>
  2. <details open>
  3. <summary>summary</summary>
  4. <div>details</div>
  5. </details>
  6. </div>
summary
details
参照元
  1. HTML Living Standard. 4.11.1 The details element
  2. HTML Living Standard. 15 Rendering 15.5.4 The details and summary elements
  3. HTML 5.2 W3C 勧告. 4.11.1 The details element
  4. MDN Web Docs. HTML <details>: 詳細折りたたみ要素

使用可能な箇所

フローコンテンツを
受け入れる要素に
配置できます。

details要素は、フローコンテンツを受け入れる要素で配置できます。ただし祖先の要素を含めて、インタラクティブコンテンツを子孫に持つ事を認めている必要があります。

  1. <div>
  2. <details>
  3. <summary>summary</summary>
  4. details
  5. </details>
  6. </div>

div要素はフローコンテンツを配置できます。ですので div要素のコンテンツの一部として details要素を配置する事ができます。

summary details
  1. <div>
  2. <a href="./index.htm">
  3. <div>
  4. <details>
  5. <summary>summary</summary>
  6. details
  7. </details>
  8. </div>
  9. </a>
  10. </div>
  1. <div>
  2. <a href="./index.htm">
  3. <div>
  4. (details)
  5. (summary)
  6. summary
  7. (/summary)
  8. details
  9. (/details)
  10. </div>
  11. </a>
  12. </div>

a要素は子孫にインタラクティブコンテンツを受け付けない要素です。ですので a要素のコンテンツの子孫として details要素を配置する事ができません。

a要素は透過的コンテンツなので、祖先の要素に配置できるコンテンツを配置できます。祖先の div要素はフローコンテンツを配置できます。ですので details要素がインタラクティブコンテンツである以外では配置する事ができる条件です。
a要素などの検証の為に、details要素をタグを書き換える事により文字データとしてみました。 あくまで文法としての例であって、実用として a要素と details要素の機能を合わせたい事はないかと思います。

(details) (summary) summary (/summary) details (/details)

配置できるコンテンツ

summary要素と
フローコンテンツを
配置できます。

details要素は、1つの summary要素とそれに続くフローコンテンツを配置できます。

  1. <details>
  2. <summary>summary</summary>
  3. <div>details</div>
  4. </details>

summary要素は、配置できます。div要素はフローコンテンツですので details要素のコンテンツの一部として div要素を配置する事ができます。

summary
details

open属性

  1. <details open>
  2. <summary>summary</summary>
  3. <div>details</div>
  4. </details>

open属性は、要約と追加情報の両方が初期表示される事を示す論理属性です。属性が存在しない場合は、要約のみが表示されます。

summary
details

気を付ける点

領域の変化

  1. <details>
  2. <summary>summary</summary>
  3. <div>details</div>
  4. <details>
  5. <summary>summary2</summary>
  6. <div>details2</div>
  7. </details>
  8. </details>

追加情報の表示, 非表示によって、占有する領域が変化します。

summary
details
summary2
details2

CSSリセット

  1. details {
  2. display: block;
  3. }

normalize.css というリセットCSS の一部で、Edge、IE 10 +、Firefoxで正しいディスプレイを追加します。
details要素の例示は、上記の CSSの効果を効かない指定をしている例です。
詳細は理解していないのですが、いろいろとバグ等の対応も含んでいる様なので、リセットCSSを利用する事をお勧めします。

summary details