【特集】
HTML 5では、ヘッダやセクションに関する要素がいくつか追加され、文書の構造をより明確にすることができるようになった。
ここで用いている「セクション」という言葉は、HTML文書を論理的に分割した単位のことである。1つの読み物における章や節などはセクションと言えるし、ブログサイトにおけるナビゲーションメニューと記事本体、記事に対するコメントなどもそれぞれ異なるセクションであると言えるだろう。
HTML 5から追加された、セクション関連のタグは以下の通りだ。
上記のタグはすべて「セクション」を生成する。またbody、blockquote、td、datagrid、 figureといったタグもセクションを生成するが、これらのタグは「セクションのルート」と呼ばれる。これらのタグの内部で構成されたセクション構造は、外側のセクション構造に影響を与えない。
以下のタグはセクション内で利用され、セクションの論理構造や付加情報を表す。
また、従来からあるh1、h2、…などのタグは、「セクションの見出し」を表す要素としてHTML5でも利用できる。見出しに関する要素で、新しく追加されたのが以下のタグだ。
上記のタグを用いてマークアップを行うことで、(HTML 4で行っていたような)divを多用したドキュメントよりも、文書の構造を明確化することができる。さらに文書構造の「アウトライン」を意識すれば、より人間にとってもプログラムにとっても理解しやすい文書構造を構築することが可能だ。
「アウトライン」とは、平たく言えばセクションの入れ子構造である。各セクションには見出し要素(h1 - h6)を用いてセクションタイトルを指定することができる。文書から目次を作成した場合、セクションの見出しが目次の各項目になり、アウトラインを視覚化できると考えればよい。
マークアップによって生成される文書のアウトラインを意識するためには、セクションが「明示的なセクション」と「暗黙的なセクション」から成ることを理解する必要がある。
明示的なセクションは、上記のsectionなどのタグを用いて明示的に生成したものだ。セクション内で見出し(h1 - h6、hgroup)を用いると、それはそのセクションの見出しとして取り扱われる。以下が明示的なセクションの例だ。
<body>
<h1>bodyで作られたセクションの見出し</h1>
<p>セクション1の本文</p>
<section>
<h2>sectionで作られたセクションの見出し</h2>
<p>セクション2の本文</p>
</section>
</body>
暗黙的なセクションは、見出し(h1 - h6、hgroup)を記述することで自動的に生成されるセクションだ。セクション本文中に見出しが現れると、暗黙的なセクションが生成され、そのセクションの見出しとして扱われる。つまり、h1など見出しを表すタグは、常に何らかのセクションの見出しを表しているということだ。
以下の例は、明示的なセクションの例と同じセクション構成を表す。ただし、明示的にセクションを指定した方が理解しやすいのは言うまでもない。
<body>
<h1>bodyで作られたセクションの見出し</h1>
<p>セクション1の本文</p>
<!-- 下のh2タグにより暗黙的なセクションが生成される -->
<h2>sectionで作られたセクションの見出し</h2>
<p>セクション2の本文</p>
</body>
見出しにはそれぞれランクがあり、h1が最高ランク、h6が最低ランクだ。暗黙的なセクションの生成には次のようなルールがあり、ランクによって動作が変化するので注意が必要だ。
前者は、1つ前の「暗黙的なセクション」で示した例と同様。後者は混乱を招きやすい。たとえば以下のようなマークアップがあるとする。
<body>
<section>
<h2>sectionで作られたセクションの見出し</h2>
<p>セクション2の本文</p>
<!-- 上の見出しよりもランクが高い -->
<h1>これはセクション3の見出し</h1>
<p>セクション3の本文</p>
</section>
</body>
上のマークアップを明示的なセクション指定で書き直すと、以下のようになる。
<body>
<section>
<h2>sectionで作られたセクションの見出し</h2>
<p>セクション2の本文</p>
</section>
<section>
<h1>これはセクション3の見出し</h1>
<p>セクション3の本文</p>
</section>
</body>
暗黙的なセクション生成では、DOMの構造とは異なるアウトラインが生成されてしまうというわけだ。混乱を招きやすいので、見出しを使用する際には常にセクションを明示的に指定したほうが無難だろう。
また、同じランクの見出しを異なるセクションで用いてもよい。たとえば、外側のセクションと内側のセクションのどちらでもh1を使っても問題はない。これにより、セクションごとに独立して見出しを設計できるため、以下のような「サイト全体の見出し」と「記事の見出し」のどちらも必要な場合などに便利だ。
<body>
<h1>サイト全体の見出し</h1>
<article>
<header>
<hgroup>
<h1>記事の見出し</h1>
<h2>記事のサブ見出し</h2>
</hgroup>
<p>記事本文</p>
</header>
</article>
</body>
以上の点を踏まえて、セクションを意識したマークアップをどのように行っていけばいいかを考えてみよう。以下の画像に示すような、記事とそれに対するコメントがメインのコンテンツとなるサイトを例にあげて検討する。
この画面を、以下のような指針でマークアップしてみた。
以下が、上の指針に沿って行ったマークアップの例である。
<!DOCTYPE html>
<html>
<head>
<title>セクション要素を用いたマークアップのサンプル</title>
<meta charset="UTF-8">
</head>
<body>
<!-- サイトヘッダ -->
<header>
<h1>サイト見出し</h1>
<nav>
<ul>
<li><a href="top.html">トップ</a></li>
<li><a href="help.html">ヘルプ</a></li>
</ul>
</nav>
</header>
<!-- 記事本文 -->
<article>
<hgroup>
<h1>記事見出し</h1>
<h2>記事サブ見出し</h2>
</hgroup>
<p>記事本文</p>
<!-- 記事に対するコメント -->
<section class="comments">
<article>
<h1>コメント1見出し</h1>
<p>コメント1本文</p>
</article>
</section>
</article>
<!-- サイトフッタ -->
<footer>
<small>Copyright SomeCompany Inc.</small>
</footer>
</body>
</html>
基本的なマークアップとしてはこんなところではないだろうか。あとは、これに必要なdivなどを追加してCSSで見た目を整えるだけだ。
なお、こうしたブラウザが知らない新しいタグを用いてマークアップを行い、CSSを施して表示させるには、ちょっとした小技が必要だ。
まず、すべてのブラウザで以下のタグがブロックレベル要素として解釈されるよう、CSSを用いて以下のように宣言する。
/* HTML5の新要素をブロックレベル要素として宣言 */
article, aside, dialog, figure, footer, header, legend, nav, section {
display: block;
}
またInternet Explorerは、未知の要素に対してはCSSがうまく機能しない。これを解決するには、新しい要素に対してdocument.createElement("要素名")を呼んでおくと、以降は既知の要素としてIEが取り扱ってくれるようになる。以下のコードをscriptタグに記述するとよい。
// IEでのみ実行されるよう、条件付きコンパイルを行う
//(http://msdn.microsoft.com/ja-jp/library/eb0w91wa%28VS.80%29.aspx)
/*@cc_on
(function() {
var newElements =
["article","aside","footer","header",
"hgroup","nav","section","figure","source",
"video","audio","canvas","output","details",
"menu","bb","command","datagrid","datalist",
"dialog","progress","meter","time","mark"];
for (var i = 0; i < newElements.length; i++)
document.createElement(newElements[i]);
})();
@*/
| 超新星残骸中にないはずの多量の一酸化炭素 - 天文衛星「あかり」が発見 [21:42 2/9] |
| 【レポート】ROBO-ONE委員会 - 第20回大会でのROBO-ONE Lightの開催を決定 [20:27 2/9] |
| 火星に海の存在を示す有力な証拠が発見される - ESAが発表 [18:48 2/9] |
| iOS向けSPDYライブラリが登場、普及はじまるSPDY [11:57 2/9] |
| GitHubのアクティブプロジェクト、もっとも多いのはMITライセンス [11:42 2/9] |
|
超新星残骸中にないはずの多量の一酸化炭素 - 天文衛星「あかり」が発見 [21:42 2/9] エンタープライズ |
|
iPhone 4Sの「Siri」が3月に日本語/中国語/ロシア語対応か - 海外報道 [21:16 2/9] 携帯 |
|
[松嶋菜々子]長谷川博己の新人賞祝福のためサプライズ登場 エランドール賞授賞式 [20:44 2/9] エンタメ |
|
ニコニコで「けいおん!」「キルミ」きらら作品を無料配信 [20:39 2/9] ホビー |
|
丸尾末広「新世紀SM画報」新装版発売で展示、原画販売も [20:31 2/9] ホビー |