HTML講座 / detailsとsummaryで開閉できる説明を作る

detailsの中にsummaryを置くと、ブラウザー標準の開閉式の説明を作れます。summaryが操作用の見出し、残りが開いたときの内容です。初期状態で開く場合はopen属性を付けます。

基本の開閉を作る

次のコードをHTML文書のbodyへ入れて開きます。最初は「View opening hours」だけが見え、選択すると説明が現れ、もう一度操作すると閉じます。

<details>
  <summary>View opening hours</summary>
  <p>We are open Monday through Friday, 9 a.m. to 6 p.m.</p>
</details>

summaryはdetailsの最初に置きます。単純な開閉だけならスクリプトは必要ありません。矢印や枠などの表示はブラウザーやCSSで変わっても、文言から内容を判断でき、操作できることが大切です。

最初から開いた状態にする

openを付けると初期状態で展開され、利用者は閉じたり再び開いたりできます。

<details open>
  <summary>Delivery information</summary>
  <p>Arrival times vary by area.</p>
</details>

openは真偽属性なので、open="false"でも属性が存在し、開いた状態です。閉じた状態にしたければ属性を取り除きます。真偽属性の規則と同じです。全員が読むべき重要な条件を、任意の補足のように閉じ込めないようにします。

何が開くか分かるsummaryを書く

複数並べる場合は、それぞれが何を説明するかを文言で区別します。「詳細」だけを繰り返すと、必要な項目を見つけにくくなります。FAQの回答を開閉させる使い方もできますが、短くすぐ必要な回答なら、そのまま表示した方が読みやすい場合もあります。

開閉は読者に追加の操作を求めます。装飾として多用せず、必要な説明を探しやすくする場合に使います。構造はMDNのdetailsで確認できます。

キーボードと初期状態を比較する

ファイルを再読み込みし、openなしとopenありを比較します。Tabでsummaryへ移動してフォーカスが見えるかを確認し、EnterとSpaceを別々に使って開閉します。CSSを追加した場合は同じ試験を繰り返します。

この基本例ではsummaryに競合するリンクやボタンを入れず、文章で内容を示します。標準の要素を使っていても、複雑な独自操作を加えた場合のフォーカスは別途確認が必要です。MDNのsummaryに使用上の条件があります。

開閉できない場合

summaryがdetailsの中にあるか、閉じタグが正しいかを確認します。CSSでクリック領域やフォーカスの表示を消していないかも調べます。一つずつ追加した変更を戻すと、原因を絞り込めます。操作全体の確認はHTMLアクセシビリティの実習と合わせて行ってください。

같은 카테고리의 다른 글
HTML講座 / タイトル・説明・言語・文字コードを設定する

HTML講座 / タイトル・説明・言語・文字コードを設定する

title、meta description、charset、viewportとhtmlのlangを整理します。タブと本文の違い、文字化けの調査、検索結果の説明が必ず採用されるわけではない点も学べます。

HTML講座 / リンクの作成、相対パスとページ内移動

HTML講座 / リンクの作成、相対パスとページ内移動

aとhrefによるリンク、絶対URLと相対URL、ページ内の移動を学びます。新しいタブ、メール、ダウンロードの条件と、三つのファイルでパスを確認する実習も紹介します。

HTML講座 / img・alt・画像サイズを指定する

HTML講座 / img・alt・画像サイズを指定する

imgのsrc、alt、width、heightの役割を学びます。画像の配置場所と相対パス、装飾画像の代替テキスト、表示幅とファイル容量の違いも説明します。

HTML講座 / HTMLアクセシビリティの基本を確認する

HTML講座 / HTMLアクセシビリティの基本を確認する

見出し、リンク、画像、フォームを意味のあるHTMLで作る方法を学びます。スキップリンク、キーボード、フォーカス、ズームを確認する小さなページと、検査の限界も紹介します。

HTML講座 / formの構造とGET・POSTによる送信

HTML講座 / formの構造とGET・POSTによる送信

action、method、nameの役割とGET・POSTの違いを学びます。FormDataと開発者ツールを使い、送信対象の値、入力検証、サーバー処理を分けて確認します。

HTML講座 / audio・video・iframeでメディアを埋め込む

HTML講座 / audio・video・iframeでメディアを埋め込む

音声、動画、外部文書の埋め込みを学びます。字幕ファイル、代替リンク、画面幅への対応と、ファイル形式や提供元の制限による読み込み失敗の確認方法も説明します。

HTML講座 / textarea・select・option・buttonを使う

HTML講座 / textarea・select・option・buttonを使う

複数行入力、選択メニュー、送信・リセット・通常ボタンを使い分けます。表示ラベルと送信値、初期値と現在値を実際のフォームで比較する方法も紹介します。

HTML講座 / table・tr・th・tdで表を作る

HTML講座 / table・tr・th・tdで表を作る

行と列を持つデータをHTMLの表で表す基本を学びます。見出しセルとデータセル、theadとtbody、横幅が広い表のスクロール方法も紹介します。

HTML講座 / figureとfigcaptionで図と説明をまとめる

HTML講座 / figureとfigcaptionで図と説明をまとめる

図とキャプションを一つのまとまりとして表す方法を学びます。altとキャプションの役割、出典の示し方、figureを使わなくてもよい場面も説明します。

HTML講座 / required・文字数・範囲で入力値を検証する

HTML講座 / required・文字数・範囲で入力値を検証する

必須入力、文字数、数値の範囲と刻み、メール形式の制約を学びます。境界値を試し、ブラウザーの案内とサーバー側の検証を分けて考える方法も説明します。