Hatena::Groupweb

vantguarde

5.5

HTML5パーサの検出

| 18:04

さて、「text/htmlでSVGが表示できた、じゃあそれはHTML5パーサを搭載してる」なんてのは怪しいもんです。IE9はHTML5 parserではありませんがインラインSVGには対応してますし。

だから、innerHTML<svg></svg>つっこんでそのnamespaceがSVGのそれかどうかを確かめるようなテストでHTML5パーサの検出を決めるのって、不十分なんですよね。HoneycombのWebKitの場合は、WebKitのバージョン的にHTML5パーサが入ってることからじゃあインラインSVG見られるだろうという想定で確かめただけなので、すべてに当てはまるわけじゃない。

とはいえ、「こういう挙動だから、これは間違いなくHTML5パーサだ」というひとつの機能って存在してないのかなと。各ブラウザがこれまで持ってたパース処理とどこかで互換性をとるように作ってるわけで、固有の挙動がありすぎると、それに依存したコンテンツに影響がでてくるので、それはそれで問題なわけです。なので、HTML5パーサを検出するには、複数のテストを組み合わせた結構長めなものになるんじゃないかなと。

そんなことを前のエントリを書きながら思っていたんですが、検索したらHenri Sivonenさんがそんなものを書いてました。しかも去年ブックマークしていたという。

ここで使われてるdetect-html5-parser.jsがそれです。やっぱり複数のテストをして判断してますね。<div<div>をつっこんでdiv<div要素になるかとか、textareastyle中の<!--の扱いとか、いろいろ面白そう。

ある機能の検出にしては大きいし、HTML5パーサをちゃんと検出する意義がそんなにないのが、Modernizrとかに入ってない理由なのかなあ。

1.31

hgroupが変わるかもしれない

| 22:19

WHATWG Blogで取り上げられたので書いときましょうか。

Various people are unsatisfied with the design of the hgroup element and wish for it to be changed. Some want it to be removed until more research is done. And they may be right. There is some anecdotal evidence that the element is difficult for people to grasp — Bruce Lawson discussed it with developers and Lars Gunther experimented on students. There are a few bugs opened on it and Steve Faulkner is trying to get the HTML WG to do a poll.

そんなに新しい話でもないんですが、hgroupが分かりにくいとか、あまり意味ないよね的な意見が増えているという話です。

hgroupはもともとheaderという要素の一機能で、そのheaderが使いにくかったので分離されたという経緯があります。

そこまで難しいわけではないと思うんですが、hgroupの目的は暗黙的なアウトラインを生成しないように、見出し要素とサブタイトルの見出し要素をひとつにまとめるというものなので、アウトラインの仕組みがなければ特に要らない要素ではあります。なので微妙っちゃ微妙。ただsubheadなんてものを導入するよりはいいと思うんですけどね。基本的には主の見出しがしっかりしてればいいわけであって。

とはいえ、Change Proposalがでても解決までに時間がかかります。あと、すでに結構なコンテンツが出回っていること、そろそろRCが出そうなIE9ですでに(parsingレベルですが)hgroupがサポートされており、仕様側で解決されるころにはリリースされるんじゃないかと思うので、タイミングは全然よくないのですよね。他のブラウザも実装してるわけですし。

header内に複数の見出しがあったら、一番ランクの高いものをexposeするとかにできるといいのかなあ。

12.9

HTML4とXHTML1ではbuttonの中にtableを入れられる

| 21:13

<input type=button><button>の違いはなんだろうという疑問に答えていたら、XHTML1の<button>にはブロック要素やら<table>を入れられることを知りました。なんと。

<!-- button uses %Flow; but excludes a, form and form controls -->

<!ENTITY % button.content
   "(#PCDATA | p | %heading; | div | %lists; | %blocktext; |
    table | %special; | %fontstyle; | %phrase; | %misc;)*">

ほんと。あらまあ。

ただHTML5の<button>は内容モデルがphrasing contentなので、ブロックや<table>は入れられません。改悪!(勢いだけ

表やリストをボタンにする意義などは横においといて、<button><table>…</table></button>なんて書いてほんとに意図したDOMが生成されるのか疑問に思って試したら、ふつうにボタンの中に表がでてきてすこしびっくりしました。tableの開始タグが出てきたらbutton要素は終了するのかなあと思ってたので。

ただ、<p><button><table>…</table></button>とかにするとOperaとかでは意図通りというか、tableが外に出ました(HTML5パーサだと引き続きpの孫だった)。ふーむ。

まあ、non-conformingになったし、使い道も思い浮かばないのでいいか……

oogattaoogatta2010/12/21 15:44質問です!。 button って今見ると Flow Content なのですが、やっぱり table 入れたら conform しないのでしょうか…?

oogattaoogatta2010/12/21 16:02失礼しました!。 Category と Content Model を見間違ってました…。

12.2

正統なお尻PとHTML5のDOM構築とWebKitのoverflowと

| 20:17

ふむふむ。

イベントは面白いだろうということでさておいて、気になったのは小久保さんのプロフィールでスクロールバーが出るというのをタイムラインでちらほら見たこと。いまChrome 9で見てるんですが、たしかに出てますね。

ソースはこんな風になってます。

<div class="profile" id="kokubo">
<h4><img … />小久保 浩大郎<span ...></h4>
<p><a href="http://nodot.jp/">nodot</a><br />
フロントエンドアーキテクト</p>
<p>...</p>
<p>...</p>
</ul>
</p>
</div>

最後に</ul></p>なものが入っちゃってるんですね。正統なお尻Pですね。たぶん、高津戸さんのプロフィールをコピーしたときのleftoverなんでしょう。

この</ul></p>がどうなるかですが、HTML5ではin bodyのinsertion modeあたりに書いてあります。</ul>

If the stack of open elements does not have an element in scope with the same tag name as that of the token, then this is a parse error; ignore the token

の条件にマッチするので、無視されます。</p>も基本はparse errorではあるんですが、

If the stack of open elements does not have an element in button scope with the same tag name as that of the token, then this is a parse error; act as if a start tag with the tag name "p" had been seen, then reprocess the current token

なのでこの前に<p>があるものとして解釈され、結果的にp要素が挿入されると。

結果として、</ul></p>のところが<p></p>に置き換わる感じです。なんでこんなトリッキーなことをやってるのかは定かではないですが、たぶんTridentの挙動に合わせたとかそんなんじゃないかなと予想してます。

ふう。で、どうやらこの中身のないpoverflow: autoに反応してるようです。なぜoverflow: autoかけてるのかCSSちゃんと見てないんでよくわかんないんですが、要素を取ったりすると問題ないという。

font-size: 0を与えたり、中にテキストを突っ込むとスクロールバーが出なくなります。overflow: autoの挙動はUA依存なので正しい挙動なんてものはないんですが、テキスト突っ込んだりすると消えたりしますし、WebKitのバグなんですかねえ。ううむ。

3.4

HTML5でたよ (Mar. 2010)

| 23:56

まだですが、もうでますよ。

もうひとつ HTML: The Markup Language (略すと「H:TML」)なんてのが出ますが、まだ上がってないですね。日付変わっちゃうかしら。

さて、Microdata分離2D Context分離はもう書いたので、ほとんど書くことがないという。。

あ、postMessage()などを定義してた部分がWeb Messagingっていうのに別れてますね。こっちはたしかWebAppsに移るので、HTML WGからは出ていません。

ほかはDiffsのchangelogから見てもらうとして。

あと関係ないですがWeb Sockets APIとWeb Socket Protocolの名称が統一されて、「WebSocket」になりました

進展は結構あった気はしますが、表だった感じではないのかなあと。とはいえLCを目指す段階で大きな動きがあってもというのはありますが……

Contact: @vant / lepetitcroissant@gmail.com.