続HTML5についてのおさらい
Updated / Published
HTML5についてのおさらい続編です。前回の内容を受けて読者の方から質問があったことに対する回答のまとめであったり、前回紹介しきれなかったセクション関連の新要素として見出しをグループ化するhgroup
要素による効果、およびheader
, footer
要素を用いたセクションといった前回から一歩踏み込んだ内容をまとめました。
前回のHTML5についてのおさらいの前提を含みます。先に参照しておくとより理解が進むかと思います。また、今回取り上げている要素はコンテンツ・モデルも関係してくるのでこの点も抑えておく必要があります。
hgroup要素 - 見出しのグループ化
hgroup
要素は、HTML5の勧告候補から除外されました。各ブラウザは互換性のためにhgroup
要素のサポートをいますぐやめるわけではありません。hgroup
要素を取り入れている場合は、該当部分を修正してください。
hgroup
要素は、複数の見出しをグループ化します。hgroup
要素の中に入れることができるのはh1
要素からh6
要素までの見出しのみです。見出しのグループ化によって得られる効果は、副題やキャッチフレーズを伴う場合に意味的・構造的にそれを一つの見出しとして構成することができることと、加えて無駄なアウトラインの形成を抑止できることです。
<body>
<h1>A</h1>
<h2>A'</h2>
<h2>B</h2>
<p>C</p>
</body>
上記のHTML5ドキュメントであれば、HTML5適合UAは暗黙のセクションに基づいて次のアウトライン(階層構造)を形成します。
- A...
body
セクションの見出し(レベルはh1
)- A'...暗黙のセクションを開始する見出し(レベルは
h2
) - B...暗黙のセクションを開始する見出し(レベルは
h2
)で、段落のCを含んでいる
- A'...暗黙のセクションを開始する見出し(レベルは
もし、制作者が意図的にA'の見出しをAの見出しの副題やキャッチフレーズとして含めたくても従来のマークアップではアウトラインが生成されてしまい、構造的にもわかれてしまう問題がありました。そこでhgroup
要素を利用することで、従来のマークアップが抱えていた問題を解決することができます。
<body>
<hgroup>
<h1>A</h1>
<h2>A'</h2>
</hgroup>
<h2>B</h2>
<p>C</p>
</body>
hgroup
要素を用いることにより、HTML5適合UAにおける上記のHTML5ドキュメントのアウトライン(階層構造)は次のように形成されます。
- A+A'...
body
セクションの見出し(レベルはh1
)- B...暗黙のセクションを開始する見出し(レベルは
h2
)で、段落のCを含んでいる
- B...暗黙のセクションを開始する見出し(レベルは
hgroup
要素内にある複数の見出しはグループ化が行われ、その見出しのレベルは複数の見出しの中で、もっとも高いレベルに準じ、意味的にも1つの見出しとして構成されます。そして、形成されるアウトラインも見出し1つ分であることがhgroup
要素のもっとも注目すべき点です。
なお、ここでは説明にあたって便宜上わかりやすくするために暗黙のセクションを用いましたが、マークアップの際は暗黙のセクションに依存するのではなく、次のように必ずセクショニング・コンテンツ(article
, aside
, nav
, section
要素)を用いるようにしましょう。形成されるアウトライン(階層構造)は同じです。
<body>
<hgroup>
<h1>A</h1>
<h2>A'</h2>
</hgroup>
<section>
<h2>B</h2>
<p>C</p>
</section>
</body>
header要素 - ページ全体のヘッダと各セクションのヘッダ
header
要素は導入部分(コンテンツの概略や目次)、ナビゲーションなどをグループ化して提供するために使います。header
要素内に、header
要素とfooter
要素を入れることはできません。header
要素はセクションの一部であって、新しいセクションを開始するものでもなければ、アウトラインにも影響を及ぼしません。そして、body
セクション内で使うか、各セクション内で使うかによって、それぞれ違った役割を果たすケースが多いはずです。
ページ全体のヘッダ(ページ・ヘッダ)
body
セクション内でheader
要素を使う場合は、サイト名称やロゴ、主要なナビゲーション、サイト内検索フォームなどをグループ化した典型的なヘッダとして提供することが一般的です。これは多くの制作者が従来使ってきた<div id="header">...</div>
に置き換わるものであると考えるとわかりやすいかもしれません。
<body>
<header>
<hgroup>
<h1>サイト名</h1>
<h2>サブタイトル</h2>
</hgroup>
<nav>
<ul>
<li><a href="/contents1/">主コンテンツその1</a></li>
<li><a href="/contents2/">主コンテンツその2</a></li>
<li><a href="/contents3/">主コンテンツその3</a></li>
</ul>
</nav>
</header>
...
</body>
各セクションのヘッダ
各セクションのヘッダとは、暗黙のセクション、またはセクショニング・コンテンツによって生成されたセクションの中で使われるheader
要素を言います。ページ・ヘッダはサイト全体に関するナビゲーションをグループ化して提供するために使用されるケースが多いのに対し、各セクションのヘッダはセクション内のコンテンツについての概略(見出しと概要)や目次といった、そのコンテンツの導入部分を提供するために使用するケースが多くなるでしょう。たとえば、次のようにarticle
要素のセクション内で本文の導入部分として提供するような使い方です。
<body>
...
<article>
<header>
<h2>続HTML5についてのおさらい</h2>
<p>TML5についてのおさらい続編です。前回の内容を受けて...</p>
</header>
...
</article>
...
</body>
footer要素 - ページ全体のフッタと各セクションのフッタ
footer
要素はそのセクションに関する情報をグループ化して提供するために使用します。header
要素と使用ケースが似ているため説明がやや冗長ですが、文法等はheader
要素と同様で、footer
要素内にheader
要素とfooter
要素を入れることができず、新しいセクションを開始するものでもなければ、アウトラインにも影響を及ぼしません。また、body
セクション内で使うか、各セクション内で使うかによって、こちらもそれぞれ違った役割を果たすケースが多いはずです。
ページ全体のフッタ(ページ・フッタ)
body
セクション内でfooter
要素を使う場合は、サイトそのものに関するナビゲーションや著作権表記などをグループ化した典型的なフッタとして提供することが一般的です。もちろん、これは多くの制作者が従来使ってきた<div id="footer">...</div>
に置き換わるものであると考えるとわかりやすいでしょう。
<body>
...
<footer>
<ul>
<li><a href="/sitepolicy/">サイトポリシー</a></li>
<li><a href="/privacy/">個人情報の取り扱いについて</a></li>
<li><a href="/sitemap/">サイトマップ</a></li>
</ul>
<small>Copyright ---. All right reserved.</small>
</footer>
</body>
各セクションのフッタ
各セクションのフッタとは、暗黙のセクション、またはセクショニング・コンテンツによって生成されたセクションの中で使われるfooter
要素を言います。フッタと言っても必ずしもセクションの最後で使わなければいけないわけではなく、セクションの頭でも途中でも使用することができます。
各セクションのフッタは、主にarticle
要素のセクション内で記事が誰によっていつ作成され、またいつ更新されたのかといった情報のグループ化であったり、本文の補足情報のグループ化、関連リンクのグループ化、ブログのコメントのグループ化などに使用されるケースが考えられます。
もしセクショニング・コンテンツの使い方で迷ったら?
質問の多かったところで、セクショニング・コンテンツであるarticle
, aside
, nav
, section
要素のいずれでマークアップするのが良いのか使い分けに迷うような場合は、次のように意味がわかりやすいものから順に当てはめていくことで、必ずしも適当ではありませんが、どのセクショニング・コンテンツでマークアップするのが良いのかの手引きにはできるかもしれません。
手順1. ナビゲーションかどうか
マークアップしようとしている内容がナビゲーションであれば、nav
要素を使います。ただし、ページ内に以降同じナビゲーションが登場する場合は先に登場する方にだけnav
要素を使います。内容がナビゲーションでない場合は次の手順へ移ります。
手順2. 自己完結された内容かどうか
その内容がそれ単独でコンテンツとして成り立つのであれば、article
要素を使います。ただし、RSS等のフィードで提供する内容に相応しかどうかを基準とします。内容が単独で成り立つものではなかったり、成り立つものであってもフィードとして提供するのに相応しくない場合は次の手順へ移ります。
手順3. なくなってもページとして成り立つかどうか
その内容がなくなってもページ、またはメインコンテンツとして成り立つのであれば、aside
要素を使います。その内容がなくなってしまうとページ、またはメインコンテンツが成り立たなくなるような場合は次の手順へ移ります。
手順4. 自然に見出しを含められるかどうか
その内容に自然に見出しを伴うことができるのであれば、section
要素を使います。自然に見出しを入れられない(見出しを伴えない)ような内容の場合は、セクショニング・コンテンツ以外の要素でマークアップするのが相応しいということになります。
strong, em, b, i, mark要素の使い分け
これまでのセクションについての内容から話が大きくそれてしまいますが、読者の方から質問があったことに対する、一見解としてあわせてここに記載しておくことにします。
XHTML1.1でプレゼンテーションモジュールに分類されていた要素は、本来XHTML2.0からは削除予定であったのに対し、HTML5からb
要素, i
要素が削除されずに残っていることから、strong
, em
, b
, i
要素、加えて新たなmark
要素をそれぞれ必要以上に使い分けなければならないのではないかと混乱される方が多いようです。
HTML5では、これらの要素における定義は明確にわけられており、strong
要素とem
要素の使い分けはわかりやすくなったかと思うのですが、i
要素とb
要素については使い分ける必要も、また無理に使う必要もない要素であると考えます。
strong要素
従来strong
要素に与えられてきた論理的な意味は「強い強調」であり、強調と重要性どちらの意味でも利用可能でしたが、HTML5では強調の意味が失われ、「重要性」のみを表す要素に変更されました。また、その重要性の度合いはstrong
要素自身の入れ子関係によって表すことができます。たとえば、次のサンプルは注意喚起したい場合で、注意喚起のフレーズの中でも特に訴えたい何故なのかの部分を入れ子にしてあります。
<h1><strong>まぜるな<strong>危険</strong></strong></h1>
<p><strong>酸性タイプ</strong>の製品と一緒に使う(まぜる)と有毒な塩素ガスが出て<strong>危険</strong>です。</p>
em要素
従来em
要素に与えられてきた論理的な意味は「強調」であり、strong
要素と同様で強調と重要性どちらの意味でも利用可能でしたが、HTML5ではstrong
要素とは逆に重要性の意味が失われ、強調のみを表す要素に変更されました。その強調の度合いはem
要素自身の入れ子関係で表すことができます。音声環境においては、em
要素でマークされた部分は強勢として働き、他の音節よりも呼気エネルギーを大きくして、読み上げられることが期待されます。たとえば、次のサンプルは強勢としてトーンを強めたい部分における使用例で、さらにトーンを強めたい部分を入れ子にしてあります。
<p>魚が<em>好き<em>です。でも、<em>お肉は<em>もっと好き</em>です。</em></p>
i要素
従来のi
要素はテキストを視覚的にイタリック体、または斜体で表示させることのみを目的とした物理要素でしかありませんでしたが、HTML5では声やムード、分類用語、技術用語、外国語の慣用句、思考、船の名前といった印刷表現において一般的にイタリック体で表記されるべきテキストを区別するために用いられます。しかしながら、ここで上げられている対象例は、一般的な日本語のサイトにおいてはほとんど使いどころがなく、また他に相応しい要素がない場合にのみi
要素を使うことが推奨されていることからも、日本語のサイトにおいてはi
要素は使い分ける必要も無理に使う必要もない要素と考えて良いでしょう。
b要素
従来のb
要素はテキストを視覚的にボールド(太字)で表示させることのみを目的とした物理要素でしかありませんでしたが、HTML5では印刷表現において一般的にボールド(太字)で表記されるべきテキストを区別するために用いられます。i
要素のような具体的な用例が設けられておらず、加えてb
要素は他に相応しい要素がない場合に、他のテキストと区別したい場合の最後の手段として用いることになっているので、i
要素よりもより一層、使い分ける必要も無理に使う必要もない要素と考えて良いでしょう。
mark要素
mark
要素はHTML5から新たに加えられた要素で、重要性でも強調性の意味をもたせるでもなく、他の文章から参照されることを目的に印付けるために使用します。たとえば、サイト内検索機能の検索結果で検索キーワードがスニペット内に含められている場合に該当キーワード部分をハイライトさせるために用いたり、引用文の中で言及したい部分に対して注目を引くために用いたり、コンピューターのプログラムコードの例示において読者に注目してほしい部分として印付けるために用いる等の利用シーンが考えらます。
以上、最後がマークアップについての見解コーナのようになってしまいましたが、HTML5のマークアップに関するおさらいはこれにて一段落とします。ご購読どうもありがとうございました。