2つ前のエントリで書いてしまったウェブページ全体の見出しをli
要素にぶち込むという案に関してTwitterで言及されていた。これについてはエントリを書いた後ちょっと考えたので、返答がてら(簡単にリプライしといたけど)エントリにする。
まずTwitterでの言及について。HTML 4.01においてdt
要素は、
<!ELEMENT DT - O (%inline;)* -- definition term -->
なので、インライン要素しか含めることが出来ない。つまり、そもそも見出しを入れることは許可されていない。対してli
要素だと、
<!ELEMENT LI - O (%flow;)* -- list item -->
なので、だいたい何でも入れることが出来る。つまり文法的な話だとli
要素ならOKで、dt
要素だとよろしくないとなる。これはHTML5でも似たような話で、dt
要素の内容モデルはフレーズ、li
要素はフローのため結論は同じになる。でも、これはあくまでも文法上問題ないというだけのこと。
では、アウトライン的におかしいのかというとそうでもない。HTML 4.01では見出し要素だけがアウトラインを作ることができるので、h1
要素がどこにあってもアウトラインは問題なく構築される。しかし、これもあくまでも仕様上そうなっているというだけで、深い所に見出しを置いてしまうとHTML文書のツリー構造と文書のアウトラインのツリー構造が大きく剥離してしまうだろう。
また、HTML5ではセクションという概念があるので話にならない。ナビゲーションに見出しを混ぜ込んだものをそのまま変換すると、
<nav>
<ul>
<li><h1><a href="http://hail2u.net/blog/">Weblog</a></h1></li>
<li><a href="http://hail2u.net/documents/">Documents</a></li>
<li><a href="http://hail2u.net/archives/">Archives</a></li>
<li><a href="http://hail2u.net/about">About</a></li>
</ul>
</nav>
となり、ウェブページ全体の見出しとしてマークアップしたものはnav
要素の見出しになってしまう。これはない。
ということで、ウェブページ全体の見出しをナビゲーションのli
要素にぶち込むという案は、HTML5では「意図したようにアウトラインが構築されないHTML文書」になるので、今後のことを考えるとよろしくないという結論になった。
もちろん単に見出し要素をli
要素に入れるということ自体は文法的に問題ないので、例えばメガメニューなんかでは使っても良いと思う。
<nav>
<ul>
<li>Windows
<nav>
<h1>Windows</h1>
<ul>
<li>Windows 製品ホーム</li>
<li>Windows 7</li>
...
</ul>
</nav>
<nav>
<h1>Windows Live</h1>
<ul>
<li>Windows Live 製品ホーム</li>
<li>Windows Live Hotmail</li>
...
</ul>
</nav>
</li>
<li>Office
<nav>
<h1>デスクトップ アプリケーション</h1>
<ul>
<li>Office.com (製品)</li>
<li>Office 2010</li>
...
</ul>
</nav>
<nav>
<h1>サービス / ソリューション</h1>
<ul>
<li>Office Web Apps</li>
<li>Office Live</li>
</ul>
</nav>
</li>
...
</ul>
</nav>
これだとアウトラインがかなり派手になり好みではないので、自分で書くとしたら普通にリストのネストで書きそう。