HTML/CSS
初心者でもスッキリ分かる!nth-childとnth-of-typeの基本と実践例
2025.12.15
Webサイトにおいて、クリックによってコンテンツを開閉する仕組みはよく使われるUIで、一般的にアコーディオンメニューと呼ばれます。前回の記事で紹介したハンバーガーメニューも、その一種です。今回はJavaScriptを用いずに、HTMLとCSSのみでコンテンツを開閉できる detailsタグ と summaryタグ の紹介をします。また、JavaScriptでアコーディオンメニューを実装する場合との違いや特徴についても解説していきます。
detailsタグ と summaryタグ は基本的にセットで使用します。それぞれの役割は以下のとおりです。
この2つを組み合わせることで、シンプルな「クリックで開閉する仕組み」をHTMLだけで実現できます。次の章では基本的な書き方を見ていきましょう。
detailsタグとsummaryタグの役割が分かったところで、実際の使い方を確認してみます。基本の形はとてもシンプルで、detailsの中にsummaryを置き、その下に表示したい内容を書くだけです。
<details>
<summary>クリックして詳細を表示</summary>
<p>ここに折りたたまれる内容が入ります。</p>
</details>
ここに折りたたまれる内容が入ります。
このように、JavaScriptを使わなくてもクリックで開閉する仕組みを簡単に実装できるのがdetailsタグとsummaryタグの利点です。
detailsタグとsummaryタグを使えば、HTMLだけで開閉機能を実装できます。しかし、同じ仕組みはJavaScriptでも作ることが可能です。では、両者にはどのような違いがあるのでしょうか。以下の表で比較してみます。
| 項目 | details/summary | JavaScript実装 |
|---|---|---|
| 実装の手軽さ | ◯タグを書くだけでOK | △JSにコードを書いて動きを作る必要がある |
| SEO | ◯内容がそのまま検索対象になる | △初めからHTMLに内容を書いておかないと検索で拾われにくいことがある |
| アクセシビリティ | ◯標準で読み上げやキーボード操作に対応 | △自分で対応を追加しないと不十分 |
| デザイン自由度 | △CSSで色や矢印、簡単なアニメーションは可能 | ◯複雑なアニメーションや他の動作と連動できる |
表から分かるように、シンプルな開閉だけならdetails/summaryで十分です。逆に、開閉に合わせて他の処理をしたい場合や高度なUIを実装したい場合にはJavaScriptを使うのが有効です。
detailsとsummaryタグは、シンプルな仕組みをすぐに導入できるのが魅力です。実際のWebサイトでよく見られる活用例は次のとおりです。
これらを取り入れることで、ページを見やすく整理できます。
details/summaryタグはそのままでも使えますが、CSSを加えることでより見やすいデザインにできます。ここでは、先ほどの活用例に対応したデザインサンプルを紹介します。必要に応じて、自分のサイトに合わせてアレンジしてください。
HTML
<details>
<summary>Q. このサイトは無料で閲覧できますか?</summary>
<p>A. はい、全ての記事は無料で閲覧いただけます。</p>
</details>
CSS
details {
margin: 1em 0;
border-bottom: 1px solid #ddd;
padding: 0.5em 0;
font-weight: bold;
}
summary {
cursor: pointer;
}
A. はい、全ての記事は無料で閲覧いただけます。
HTML
<details class="note">
<summary>補足説明を見る</summary>
<p>この操作は一度実行すると取り消せません。注意して進めてください。</p>
</details>
CSS
.note {
margin: 1em 0;
padding: 0.5em 1em;
border-left: 4px solid #f39c12;
background: #fff8e6;
border-radius: 4px;
font-weight: bold;
}
.note summary {
color: #e67e22;
cursor: pointer;
}
この操作は一度実行すると取り消せません。注意して進めてください。
HTML
<details class="code-block">
<summary>コードを表示</summary>
<pre><code><h1>Hello World</h1>
<p>これはサンプルコードです。</p></code></pre>
</details>
CSS
.code-block {
margin: 1em 0;
padding: 0.5em;
border: 1px solid #ccc;
border-radius: 6px;
background: #f4f4f4;
font-family: monospace;
}
.code-block summary {
font-weight: bold;
cursor: pointer;
color: #2c3e50;
}
<h1>Hello World</h1>
<p>これはサンプルコードです。</p>
便利なdetails/summaryタグですが、いくつか注意点があります。
今回は、HTMLのdetailsタグとsummaryタグについて解説しました。クリックで開閉できる仕組みをHTMLだけで簡単に実装できるのが大きな特徴です。
まとめると、
このように、JavaScriptでも同じ仕組みは実装可能ですが、それぞれの利点があります。シンプルに実装したいときはdetails/summaryを、複雑なUIを作りたいときはJavaScriptを活用し、うまく使い分けてWeb制作に役立てていきましょう。
投稿一覧に戻る