■
どっかで、「HTMLでdivを使ってセクションを明示しようとするのは、理念の破綻だ」みたいな記事を読んだ。
でも、それってなんか違う気がするな。
まず、HTMLには表現できる文書の構造に制限がある。つまり用意された要素でしか意味を明示できない。たとえば、(少なくともHTML4までは)章や節がどのような範囲か示せないし(hn
要素から推定はできる)、目次を示す要素もない(ま、いらないかもしれないが)。リストのキャプションもないし、タイトルに付随するサブタイトルを示す要素もない。つまり、用意された要素で表わされる文章構造クラスに制限される。
しかし、その中に div
と span
がある。これらは汎用要素と呼ばれていて、特に意味を持たない。意味を持たないことが、この要素の存在に意味がないということではない。これらの要素は、HTMLでは表現できない要素をとりあえずマークアップしておきたいという目的で使われる。いや、使うことを想定している。ある範囲が「何か」であるということを主張するが、HTMLを理解するUAは普通それを特に感知しない(もちろんデフォルトで何かしら強調表示するUAがあってもいいだろう)。
「何か」を表わす div
と span
は、 class
や id
プロパティを使って、分類できる。これらのプロパティは一種のメタ情報を与えるが、やはり UA は感知しない。
UAが理解しない情報は、単なる冗長情報だろうか。CSSで見栄えを調節するだけの役割しかないのだろうか。
たとえば、ある文書に対して、十分な構造記述能力をもった自作マークアップ言語(XMLで)を用意しよう。この文書を一般に公開するさいは、HTMLにしたほうがよいと考えたとする。このとき、HTMLにない構造情報は消すべきだろうか? そういうものを表わすのが div
であり、 span
であるはずだ。
逆に、他の言語に変換する可能性を考慮して、これらの要素を使うこともまた HTML の理念を破綻しない方法だと思う。そしてその1つが、セクションを表わす div
だ。 XHTML2 では、次のようなマークアップができるようになるらしい。(section
って長いな。sec
かs
に出来たらいいのに。打ち消し線要素とかぶるから採用されなかったんだろうけど)
<section> <h>見出し1</h> <p>内容</p> <section> <h>見出し2</h> …
これと相互変換できるように現行のHTMLでは次のようなマークアップをするのである。
<div class="section"> <h1>見出し1</h> <p>内容</p> <div class="section"> <h2>見出し2</h> …
UA にとっては、なくても「大丈夫」な要素であるし、もっといえば無駄な情報である。しかし、相互変換しようとするものには「有益な」情報を保持できる、つまり HTML では表わしきれない情報を補う、余裕を持たせてあるのだ。もちろん、CSSのための要素じゃないよん。