HTMLに提案中のmain要素

12月になった。HTML5Canvas APIのCRが出る。

MicrodataはRDFaコミュニティのキャンペーンにより遅れそう。わからんけど。altのやつとかもそうかな。やれやれだ。

さて、一緒に出るかはわからないけれど、<main>要素の提案がextension specとして公開されることは決まった。

で、ここ数日でいろいろ動いてるので、ちょっと書いとこうかなと。

<main>ARIAとともに

<main>の仕様は、Steve Faulknerがいろいろ頑張って書いているもの。

アクセシビリティ畑(?)の方なので、role="main"にマップされると定義されている。というかsyntactic sugarに近い。

利点などはSteveの書いたユースケース中にある。

role="main"にマップされると、ARIAを知らないひとも間接的にARIAを使うことになるので、Landmark Rolesが普及するといったところがある。role="main"があると、ARIAをサポートしている環境に対しては、スキップリンクなんかよりもずっとスマートな解決策になる。

コンベンションとしての<main>

アクセシビリティ的な利点だけではない、とされている。要素の名前からも分かる通り、id="main"class="main"などもほぼ自動的に<mainで置き換えられるであろうという意図がある。

また、もともとmaincontentという名前だった経緯もあり、id="content"とかも<main>になるのかなと推測できる。<header>とかに近いかな。<main>となって広まれば、Readability系のアプリも楽になるのかもしれない。

さまざまな反応

というわけで、前者よりも後者のところが受けて、デベロッパーからは支持を受けてる印象だけど、HTML WGやWHATWG, ベンダーの中の人の意見はさまざま。

たとえばHixieは、今回の<main>に限らず「主要な部分をマークアップする」要素が必要ないというスタンスをとっている。理由は、サイトの<header><footer>, サイドバーとして使われている<aside>をページから除けば、残るのは必然的に主要な部分だろうと考えているから。(このやり方は“Scooby Doo”アルゴリズムと呼ばれてたりする。ユーザースクリプトとかもある。)

すでに解決法があるのに、新たな方法を仕様に入れて冗長になるのは避けたいという思いが、仕様を書いている側としてあるのだろう。

ただ、明示的にマークアップする方法があってもそこまで問題ないと考えている人ももちろんいる。Maciejは、利が大きいとは思っていないけど利はある、実装コストは低いといった理由から、賛同ちっくな意見を寄せている。James Grahamのコメントには、すでにcowpathとなっているのではという指摘もある。

実装コストは低いけど…

Steveは仕様を書くだけではなく、WebKitにもパッチを投げている。ごりごり押している。

ただ、他のベンダーはどうなのかとか、WebKitプロジェクト内でゆるいコンセンサスがとれるのかといった議論がはじまっているので、するっと入るわけではない。というかwebkit-devですんなよ感……

今のところ、メリットがとても大きいわけではないけれど全くないわけじゃないし、導入しても害もそんなにない、実装コストも低いというのが絶妙なふんわり感を生み出し、ほわほわと<main>を浮かせている感じ。

どうなんだろう

現段階で自分の意見を言うなら、あってもなくてもいい。導入されたら<header>, <footer>と同じくらいの頻度で多分使うけれど、なくてもこまんない。

懸念があるとすれば、role="main"の仕様から、文書内で一度しか登場していけないという変な制約が入ってること。そんな知られてる気がしないけど、role="main", role="banner", role="contentinfo"は文書中にひとつ以上マークすべきでないとされているので、そこがちょいと変かなと。“main”なものが複数登場する可能性は、低いとは思うけど。

あとは、コンベンションといっても、やっぱり“main”や“content”の対象はひとによってばらつきが出るんじゃないかと。特に、サイドバーが入る入らないとかでぶれるんじゃないかなあと。もちろんページ内の情報とHTMLの書き方にもよるんだけど、サイトワイドなサイドバーとしての<aside>なのに、なぜか<main>に包含されてるHTMLが出てきそうだなと。

注文というか、要望をあげるとすれば、文書内の主要なコンテンツを囲ってるんだから、<main>がページ内にある場合はそれを主のsectioning rootにするとか、セクションとしての性質が与えられててもいいんじゃないかと思う。