0Pricing
HTML Academy · レッスン

detailsとsummaryの開示ウィジェット

JavaScriptなしでネイティブの展開・折りたたみコンポーネントを作成します

「detailsとsummaryの開示ウィジェット」はCoddyKit上の無料HTML Academyレッスンです。 これはレッスン3/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはHTML Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 HTML Academyコースには全4レッスンが含まれています。

detailsとsummaryとは何ですか

<details>要素と<summary>要素を使うと、JavaScriptなしでネイティブの開示ウィジェット(展開と折りたたみを行うコンポーネント)を作成できます:

<details>
  <summary>What is HTML?</summary>
  <p>HTML (HyperText Markup Language) is the standard markup language
     used to create web pages.</p>
</details>

仕組み

操作の動作:

  • デフォルトでは、<summary>だけが表示されます
  • summaryをクリックすると、残りのコンテンツの表示と非表示が切り替わります
  • デフォルトでは、summaryに開示用の三角形が表示されます
  • JavaScriptは必要ありません

open属性

open属性を指定すると、details要素をあらかじめ展開した状態にできます:

<details open>
  <summary>Installation instructions</summary>
  <ol>
    <li>Download the installer</li>
    <li>Run the installer</li>
    <li>Restart your computer</li>
  </ol>
</details>
<!-- open is a boolean attribute: presence = expanded -->
<!-- Remove it to start collapsed -->

FAQの作成

FAQのセクションは、最適な使用例です:

<h2>Frequently Asked Questions</h2>

<details>
  <summary>Is HTML5 a programming language?</summary>
  <p>No. HTML5 is a markup language that defines the structure and meaning
     of web content. Programming languages like JavaScript add logic and behavior.</p>
</details>

<details>
  <summary>Do I need to close void elements?</summary>
  <p>In HTML5, void elements like &lt;img&gt; and &lt;br&gt; do not require
     a closing slash. Both &lt;br&gt; and &lt;br /&gt; are valid.</p>
</details>

detailsとsummaryのスタイル設定

外観をカスタマイズします:

details {
  border: 1px solid #e2e8f0;
  border-radius: 0.5rem;
  padding: 0.75rem 1rem;
  margin-bottom: 0.5rem;
}

summary {
  font-weight: 600;
  cursor: pointer;
  list-style: none;   /* remove default triangle */
}

summary::before {
  content: '▶ ';      /* custom arrow */
}

details[open] > summary::before {
  content: '▼ ';      /* rotate when open */
}

デフォルトの三角形を削除する

開示用の三角形は、list-styleによって適用されます:

/* Remove the default arrow: */
summary {
  list-style: none;
}

/* Firefox: */
summary::-webkit-details-marker {
  display: none;
}

/* Then add a custom indicator: */
summary::after {
  content: '+';
  float: right;
}
details[open] summary::after {
  content: '−';
}

toggleイベント

toggleイベントを使って、開閉を監視します:

const details = document.querySelector('details');

details.addEventListener('toggle', () => {
  if (details.open) {
    console.log('Details opened');
    // Track analytics, load content, etc.
  } else {
    console.log('Details closed');
  }
});

detailsによるアコーディオン

基本的なアコーディオンを作成します。一度に1つのパネルだけを開けるようにします:

/* Pure CSS accordion using details: */
/* Each item is a details element */
/* For exclusive open, use JavaScript: */

const allDetails = document.querySelectorAll('details');
allDetails.forEach(d => {
  d.addEventListener('toggle', () => {
    if (d.open) {
      allDetails.forEach(other => {
        if (other !== d) other.removeAttribute('open');
      });
    }
  });
});

detailsとsummaryのアクセシビリティ

組み込みのアクセシビリティ機能:

  • summaryはキーボードフォーカスを受け取り、EnterまたはSpaceで操作できます
  • スクリーンリーダーはsummaryのテキストと展開状態を読み上げます
  • 非表示のコンテンツはDOM内に存在しますが、展開されるまでは非表示として読み上げられます

排他的なアコーディオンのname属性

HTML 2025では、ネイティブの排他的なアコーディオンを実現するために、detailsにnameが追加されます:

<details name="faq">
  <summary>Question 1</summary>
  <p>Answer 1...</p>
</details>

<details name="faq">
  <summary>Question 2</summary>
  <p>Answer 2...</p>
</details>
<!-- details with the same name act as a group -->
<!-- Opening one closes the others automatically -->
<!-- Supported in Chrome 120+ and Firefox 130+ -->

toggleによるコンテンツの遅延読み込み

detailsが開かれたときだけコンテンツを読み込みます:

<details id="advanced">
  <summary>Load advanced settings...</summary>
  <div id="advanced-content">Loading...</div>
</details>

<script>
const d = document.getElementById('advanced');
d.addEventListener('toggle', async () => {
  if (d.open) {
    const res = await fetch('/api/settings');
    const html = await res.text();
    document.getElementById('advanced-content').innerHTML = html;
    d.removeEventListener('toggle', arguments.callee);
  }
}, { once: true });
</script>

確認問題

detailsの開示ウィジェットで、常に表示されるトリガーテキストを提供する要素はどれですか?

復習:詳細と概要

ディスクロージャーウィジェットの要点:

  • <details> + <summary> — JavaScriptなしでネイティブの展開・折りたたみに対応します
  • open 属性 — あらかじめ展開した状態にします
  • toggle イベント — 展開・折りたたみに反応します
  • CSSでスタイルを設定します。list-style: none でデフォルトの三角形を削除できます
  • name 属性 — 排他的なアコーディオンを作成します(Chrome 120以降)

よくある質問

「detailsとsummaryの開示ウィジェット」レッスンは無料ですか?

はい。「detailsとsummaryの開示ウィジェット」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、HTML Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 HTML Academyコースには全4レッスンが含まれています。

「detailsとsummaryの開示ウィジェット」で何を学びますか?

JavaScriptなしでネイティブの展開・折りたたみコンポーネントを作成します ブラウザで直接実行するハンズオンコードでHTML Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

HTML Academyを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのHTML Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン3/4です。

「detailsとsummaryの開示ウィジェット」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このHTML Academyレッスンでコードを書いて実行できますか?

はい。すべてのHTML Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. asideと補足コンテンツ
  2. figureとfigcaption再入門
  3. detailsとsummaryの開示ウィジェット
  4. progress要素とmeter要素
← HTML Academyに戻る