無理しないでゆっくり休んでね!

HTML5のdetailsとsummary: コンテンツの表示を制御する

ウェブページに情報を簡潔にまとめて、ユーザーが必要に応じて詳細を表示できるようにする方法を探していますか?HTML5の<details><summary>要素がその解決策となります。

この記事では、これらの要素の使い方と、それらを活用してユーザーエクスペリエンスを向上させる方法を解説します。

<details>とは?

<details>要素は、デフォルトで非表示の情報を格納するコンテナとして機能します。

ユーザーが要素をクリックすると、隠されていたコンテンツが表示されます。

この要素は、FAQセクション、ジョブリスト、コメントなど、省略可能な詳細情報を提供する場合に特に有効です。

基本的な使用方法

<details>
  <summary>詳細を表示</summary>
  ここに隠されたコンテンツが表示されます。
</details>
詳細を表示 ここに隠されたコンテンツが表示されます。

<summary>とは?

<summary>要素は、<details>要素の最初の子として使用され、ユーザーがクリックできる要約またはキャプションを提供します。

<details>要素が開かれると、この<summary>に含まれるテキストがコンテンツの見出しとして機能します。

カスタマイズ

CSSを使用して<details><summary>の見た目をカスタマイズすることができます。

例えば、アイコンの追加や色の変更などが可能です。

詳細を表示 ここに隠されたコンテンツが表示されます。
<details class="details-demo">
  <summary class="summary-demo">詳細を表示</summary>
  ここに隠されたコンテンツが表示されます。
</details>
/* details要素全体のスタイリング */
.details-demo {
    border: 1px solid #aaa;
    border-radius: 4px;
    padding: 20px;
    background-color: #f9f9f9;
    position: relative; /* 追加アイコンの位置指定のため */
}

/* summary要素のスタイリング */
.summary-demo {
    font-weight: bold;
    color: #333;
    cursor: pointer;
    outline: none; /* フォーカス時のアウトラインを削除 */
    list-style: none; /* デフォルトの三角形を非表示に */
}

/* summary要素の疑似要素にカスタムアイコンを追加 */
.summary-demo::before {
    content: '◎';
    font-size: 16px;
    color: red;
    margin-right: 5px;
    position: absolute; /* 絶対位置指定 */
    left: 0; /* 左端から配置 */
}

/* details要素が開いたときのsummaryのアイコンを変更 */
.details-demo[open] .summary-demo::before {
    content: '◉'; /* アイコンを変更 */
}

/* クリック可能な領域を示すためにマウスホバー時のスタイルを変更 */
.summary-demo:hover {
    background-color: #e8e8e8;
}

/* デフォルトのマーカーを消すための追加スタイル */
.details-demo summary::-webkit-details-marker {
    display: none;
}

実用的な例

FAQセクション

<details>
  <summary>よくある質問1</summary>
  ここに答えを表示します。
</details>

<details>
  <summary>よくある質問2</summary>
  別の答えがここに表示されます。
</details>
よくある質問1 ここに答えを表示します。
よくある質問2 別の答えがここに表示されます。

折りたたみ可能なコメント

<details>
  <summary>この投稿について3件のコメントがあります</summary>
  <p>コメント1: 素晴らしい記事です!</p>
  <p>コメント2: もっと詳しく知りたいです。</p>
  <p>コメント3: ありがとうございます!</p>
</details>
この投稿について3件のコメントがあります

コメント1: 素晴らしい記事です!

コメント2: もっと詳しく知りたいです。

コメント3: ありがとうございます!

<details>要素のネスト

<details>要素は、他の<details>要素の内部に配置してネストすることができます。

これにより、情報を階層的に整理し、ユーザーが必要に応じてさらに詳細な情報にアクセスできるようになります。特に、長いドキュメントや複雑なFAQセクション、設定オプションなど、多層的な情報を扱う場合に便利です。

<details>
  <summary>第1層の情報</summary>
  ここに第1層の内容が表示されます。
  
  <details>
    <summary>第2層の詳細情報</summary>
    ここに第2層の詳細な内容が表示されます。

    <details>
      <summary>さらに深い第3層の情報</summary>
      第3層のさらに詳細な内容がここに表示されます。
    </details>
  </details>
</details>

クリックしてみてください。

第1層の情報 ここに第1層の内容が表示されます。
第2層の詳細情報 ここに第2層の詳細な内容が表示されます。
さらに深い第3層の情報 第3層のさらに詳細な内容がここに表示されます。

ネスト時の注意点

  • 可読性を保つ: 情報が多層になると、ユーザーが迷子にならないようにするため、各層の要約(<summary>)は明確で理解しやすいものにしましょう。
  • スタイリングを適用: CSSを使って、異なる階層を視覚的に区別できるようにします。たとえば、インデントを増やしたり、異なる色やアイコンを使って各階層を強調することができます。
  • パフォーマンスを考慮: 非常に多くのネストや大量のコンテンツは、ページの読み込み時間に影響を与える可能性があります。適切な量のコンテンツを保ち、ユーザー体験を最優先に考えましょう。

<details>要素のネストを利用することで、ウェブページ上での情報の整理と表示が大幅に改善され、エンドユーザーにとってよりナビゲートしやすいコンテンツを提供することができます。

異なる階層を視覚的に区別できるように、少なくとも、距離を作ります。

details{
  padding-left: 20px
}

こんな感じです。

第1層の情報 ここに第1層の内容が表示されます。
第2層の詳細情報 ここに第2層の詳細な内容が表示されます。
さらに深い第3層の情報 第3層のさらに詳細な内容がここに表示されます。

ブラウザの互換性

<details><summary>は現代のほとんどのブラウザでサポートされていますが、一部の古いブラウザでは対応していない場合があります。利用前には、ターゲットとするユーザー層のブラウザ互換性を確認してください。


まとめ

<details><summary>要素を使うことで、ウェブページ上の情報を整理し、ユーザーに対してより良いナビゲーションと体験を提供することができます。

この記事が、これらのHTML要素を活用する方法についての理解を深める一助となれば幸いです。

コメント

タイトルとURLをコピーしました