HTML4の要素がXHTML名前空間に属するものとして扱われる件

先のStylishを改造してみるの記事がCSSコミュニティスレで言及されまして、やや意外な展開となりました。かいつまんでまとめると以下のような感じ。

  1. FirefoxのCSS実装では、text/htmlの文書の要素もXHTML名前空間を選択するセレクタで選択されるようだ。
    <title>例</title>
    <style type="text/css">
    @namespace h url(http://www.w3.org/1999/xhtml);
    h|p{display:none;}
    </style>
    <p>表示されない段落。</p>
  2. これは仕様上正しい動作なのだろうか。
  3. @namespaceの規則からするとおかしいように見える。
  4. 和泉さんによりBugzillaへ報告
  5. えむけいさんにより、WHATWGWeb Applications 1.0仕様に従ったものではないかとの指摘あり。
  6. なるほどー。

Web Applications 1.0仕様の該当箇所、1.9. Terminologyから引用すると、

To ease migration from HTML to XHTML, UAs conforming to this specification will place elements in HTML in the http://www.w3.org/1999/xhtml namespace, at least for the purposes of the DOM and CSS. The term "elements in the HTML namespace", when used in this specification, thus refers to both HTML and XHTML elements.

(自分なりの訳: HTMLからXHTMLへの移行を容易にするため、本仕様に準拠するUAは、少なくともDOMとCSSのために、HTMLの要素を http://www.w3.org/1999/xhtml の名前空間に置くものとするだろう。従って、用語「HTML名前空間の要素」は、本仕様で使われる場合、HTMLとXHTML両方の要素を指す。)

とのこと。

自分も、「HTML4の要素は名前空間とは関係ないのだから、CSSでXHTMLの名前空間に属するものとして扱われるのはおかしいのでは」と思っていたのですが、理由があってそのような仕様が公開されており、Firefoxはそれに従っているということで納得が行きました。色々と情報が得られたことに感謝。