HTMLに提案中のmain要素
12月になった。HTML5とCanvas APIのCRが出る。
- Transition Request: HTML5 as Candidate Recommendation
- Transition Request: HTML Canvas 2D Context as Candidate Recommendation
MicrodataはRDFaコミュニティのキャンペーンにより遅れそう。わからんけど。altのやつとかもそうかな。やれやれだ。
さて、一緒に出るかはわからないけれど、<main>要素の提案がextension specとして公開されることは決まった。
- request to publish main element extension specification as a FPWD
- Re: CfC: to publish main element specification as a First Public Working Draft (FPWD)
で、ここ数日でいろいろ動いてるので、ちょっと書いとこうかなと。
<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にするとか、セクションとしての性質が与えられててもいいんじゃないかと思う。