【HTML】セクショニングコンテンツ一覧

# セクショニングコンテンツとは
- HTML文書内の区間を明示する要素
- `section`,`nav`,`article`,`aside`の4つ
    - headerやmainなどは暗黙的に区間が形成される
- どの要素も該当しない場合は`div`を使用する

| 要素名     | 定義する内容 | 
| ------- | ------------ |
| section | 一般的な区間       |
| nav     | 他要素へのナビゲーション | 
| article | 自己完結している要素   | 
| aside   | 本文に関する間接要素   | 

# 詳細
## section
文書の一般的な区間を定義する要素。他に適切な要素がない場合に使用する。
使用する際は以下の点に注意する
- できる限り見出し要素を子要素に含め、区別できるようにする
- 本要素の内容が文書内で自己完結している場合、articleを使用する
- 本要素の内容がメインコンテンツに関する間接的な内容の場合、asideを使用する
- 本要素の内容が文書のメインコンテンツの場合、mainを使用する
- スタイル付けなどのラッパーとしてのみ使用する場合、divを使用する
[MDN (section)](https://developer.mozilla.org/ja/docs/Web/HTML/Element/section)
```html
<section>
    <h1>セクション</h1>
    <span>Section要素には見出しを含める</span>
</section>
```

CSSやJavaScriptで扱うための単なる囲いとして使用している場合は`div`を使用する
<p class="codepen" data-height="300" data-default-tab="html,result" data-slug-hash="BaXPQJw" data-pen-title="section" data-user="Momokonomi" style="height: 300px; box-sizing: border-box; display: flex; align-items: center; justify-content: center; border: 2px solid; margin: 1em 0; padding: 1em;">
  <span>See the Pen <a href="https://codepen.io/Momokonomi/pen/BaXPQJw">
  section</a> by Momokonomi (<a href="https://codepen.io/Momokonomi">@Momokonomi</a>)
  on <a href="https://codepen.io">CodePen</a>.</span>
</p>
<script async src="https://cpwebassets.codepen.io/assets/embed/ei.js"></script>

### アクセシビリティ
デフォルトのロールを持たず、ランドマークとして扱われない
section内部に見出しを持つ場合、`aria-labelledby`属性を付けることでランドマークとして扱うことができる
[aria-labelledby - アクセシビリティ | MDN](https://developer.mozilla.org/ja/docs/Web/Accessibility/ARIA/Attributes/aria-labelledby)

## nav
文書内の他の要素や他の文書へのナビゲーションリンクを表示するための要素
メニューや目次・索引などの作成に使用する

使用する際は以下の点に注意する
- 全てのリンクに本要素を使用する必要はない。ナビゲーションリンクの主要なブロックのみに使用する。
- 本要素を文書内に複数使用する場合、`aria-labelledby`属性で区別できるようにする
- スクリーンリーダーなどはこの要素を使用して初期読み上げから省略するか判断するために使用することがある
[\<nav>: ナビゲーションセクション要素 - HTML: ハイパーテキストマークアップ言語 | MDN](https://developer.mozilla.org/ja/docs/Web/HTML/Element/nav)
### アクセシビリティ
デフォルトで`navigation`ロールをもち、ランドマークとして扱われる。スクリーンリーダーはランドマークを使用してページ内の要素に飛ぶことができるため、読み飛ばしが必要・便利ならばnav要素を使用する
navが複数存在する場合は`aria-labelledby`で区別できるようにする
[ARIA: navigation ロール - アクセシビリティ | MDN](https://developer.mozilla.org/ja/docs/Web/Accessibility/ARIA/Roles/navigation_role)

## article
サイト内の要素の中で自己完結している要素を表現するために使用する
Qiitaでは記事一覧の各記事が該当する

使用する際は以下の点に注意する
- articleは見出し要素などで識別できるようにする
- article要素を入れ子にした場合、内部のarticleは外部のarticleに関する記事を表現する
- artcile要素の著者情報をaddressで表現できるが、入れ子にしたarticleには適応されない
- article要素の発行日時はtime要素のdatetime属性で示すことができる
[\<article>: 記事コンテンツ要素 - HTML: ハイパーテキストマークアップ言語 | MDN](https://developer.mozilla.org/ja/docs/Web/HTML/Element/article)

<p class="codepen" data-height="300" data-default-tab="html,result" data-slug-hash="JjgBEYR" data-pen-title="Article" data-user="Momokonomi" style="height: 300px; box-sizing: border-box; display: flex; align-items: center; justify-content: center; border: 2px solid; margin: 1em 0; padding: 1em;">
  <span>See the Pen <a href="https://codepen.io/Momokonomi/pen/JjgBEYR">
  Article</a> by Momokonomi (<a href="https://codepen.io/Momokonomi">@Momokonomi</a>)
  on <a href="https://codepen.io">CodePen</a>.</span>
</p>
<script async src="https://cpwebassets.codepen.io/assets/embed/ei.js"></script>

### アクセシビリティ
article要素はデフォルトでarticleロールをもつ。本ロールはランドマークとはみなされないが、多くの支援技術は気時間のナビゲートする手段をサポートする。
[ARIA: article ロール - アクセシビリティ | MDN](https://developer.mozilla.org/ja/docs/Web/Accessibility/ARIA/Roles/article_role)


## aside
文書のメインコンテンツと間接的な関係しかない要素を表現するタグ
サイドバーや広告・補足事項を表現する際に使用する

使用する際は以下の点に注意する
- 文書中の括弧書きは文章の主要な流れにあるため、そのような要素に対して本タグを使用しない
[\<aside>: 余談要素 - HTML: ハイパーテキストマークアップ言語 | MDN](https://developer.mozilla.org/ja/docs/Web/HTML/Element/aside)

### アクセシビリティ
デフォルトで`complementary`ロールをもつ。本ロールはランドマークとして扱われるため、支援技術が本タグ要素に飛んだり、スキップすることができる
複数のaside要素がある場合は、各要素に`aria-label`属性でラベルを付ける必要がある
[ARIA: complementary ロール - アクセシビリティ | MDN](https://developer.mozilla.org/ja/docs/Web/Accessibility/ARIA/Roles/complementary_role)

# 参考文献
- [MDN](https://developer.mozilla.org/ja/docs/Learn/HTML)
- （著：太田良典 中村直樹）HTML解体新書 仕様から紐解く本格入門　(2022年4月25日発行)