CSS charset sniffing

CSS における文字コード

仕様書

@charset 規則

文脈

[4] @charset は最初の規則でなければ非妥当です >>3

[5] @charsetスタイルシート最上位になければ非妥当です >>3

エスケープ

[12] escape (CSS) 参照。

歴史

@charset の実装状況

[53] @charset 規則を書ける場所にはいくつかの制約があります。 また、利用者エージェントスタイル・シートの先頭以外にある @charset 規則無視しなければならないことになっています。 ですが、 Firefox 2 も Opera 9 も、 少なくても CSSOM@charset に対応する CSSRule を追加するかに関しては、 ほとんどの制約をチェックしていないようです。

ほとんどの制約は charset の自動検出を容易にするためのもので、 CSSOM の構築にはそもそも関係ないからでしょう。
WinIE 6 はまったく @charsetCSSOM に反映させません。 cssText にも出てきません。

[54]

[55]

[56] ; がない: https://suika.suikawiki.org/gate/2007/cssom/viewer?c=%40charset%20%22US-ASCII%22;h=%3Cp%3EXXXXXX;p=n;x=style-elementFirefox 2 でも Opera でも無視して空のスタイル・シートと同じに扱うようです。 (名無しさん)

[57] U+0020 なし: https://suika.suikawiki.org/gate/2007/cssom/viewer?c=%40charset%22US-ASCII%22%3B;h=%3Cp%3EXXXXXX;p=n;x=style-element でも Firefox 2、Opera 9 とも CSSOM に現れます。 (名無しさん)

[58] @charset の前に未知の @規則

Firefox 2、Opera 9 とも CSSOM 上に @charset が (Opera 9 では @a も) 現れます。 (名無しさん)

[59] 以下のように @charset無視するべき場合に、 Firefox 2 は CSSOM 上に CSSCharsetRule を追加しませんが、 Opera 9 はします:

(名無しさん)

[60]

(CSSOM 的に) Firefox は全部無視、 Opera 9 は1つ目だけ無視。

(名無しさん)

[61] https://suika.suikawiki.org/gate/2007/cssom/viewer?c=%40charset%20%22%0D%0A%40charset%20%22US-ASCII%22%3B;h=%3Cp%3EXXXXXX;p=n;x=style-element

(CSSOM 的に) Firefox 2 も Opera 9 も全部無視。 (名無しさん)

[62] https://suika.suikawiki.org/gate/2007/cssom/viewer?c=%40charset%20%22%0A%3B%40charset%20%22US-ASCII%22%3B;h=%3Cp%3EXXXXXX;p=n;x=style-element

(CSSOM 的に) Firefox 2 も Opera 9 も、1つ目だけ無視。 (名無しさん)

[63] charset 名の閉じ引用符がない:

Firefox 2、Opera 9 のどちらも、全部無視。 (名無しさん)

[64] >>54 @charset の部分に escape https://suika.suikawiki.org/gate/2007/cssom/viewer?c=%40ch%5C61%20rset%20%22US-ASCII%22%3B;h=;p=n;x=style-element は、 Opera 9 では UNKNOWN_RULE 扱いでした。

そもそも Opera 9 は ATKEYWORD 中の escape に (\0 も含めて) 対応していませんでした。

(名無しさん)

[65] >>59 壊れた @namespace が前にある https://suika.suikawiki.org/gate/2007/cssom/viewer?c=%40namespace%3B%40charset%20%22US-ASCII%22%3B;h=%3Cp%3EXXXXXX;p=n;x=style-element

[6] >>4 最初の規則といいますが、 Chrome でも Firefox でも、空白注釈は数に入っていません。 Firefox では非妥当規則CDOCDC があっても構いません。 Chrome ではこれらがあると非妥当とみなされます。

[7] Re: [cssom] Rationale for including (or not) CSSCharsetRule ( (Tab Atkins Jr. 著, 版)) http://lists.w3.org/Archives/Public/www-style/2013May/0758.html

[8] Chromium Dashboard ( ( 版)) http://www.chromestatus.com/metrics/feature/timeline/popularity/426

[9] IRC logs: freenode / #whatwg / 20140901 ( ( 版)) http://krijnhoetmer.nl/irc-logs/whatwg/20140901#l-253

[10] csswg: changeset 14817:86a5f6f5df18 ( ( 版)) https://dvcs.w3.org/hg/csswg/rev/86a5f6f5df18de3c6b7a34d4bd91862298bfb0dd

[11] CSS 2.1 @charset tests invalidated by Level 3 ( (Henri Sivonen 著, 版)) http://lists.w3.org/Archives/Public/public-css-testsuite/2012Dec/0000.html