[1] [[WinIE 6]] は、[[選択子]]に構文的に未対応なものが含まれていると、[[選択子]] (の[[群]]) 全体、つまり [CODE(CSS)@en[[[selectorText]]]] を [CODE(CSS)@en[[[UNKNOWN]]]] に置き換え (て [[CSSOM]] の一部に含め) ます。 ([[名無しさん]]) [2] [[WinIE 6]] は、未対応の[[擬似クラス]]を [CODE(CSS)@en[:[[unknown]]]] に置き換え (て [[CSSOM]] の一部に含め) ます。 [PRE(CSS bad example code)[ a:xxxx, b { color: red } ]PRE] では、 [[CSS 2.1]] 的には[[宣言ブロック]]全体が無視されるべきですが、 [[WinIE 6]] では [CODE(HTMLe)@en[[[b]]]] が[[赤]]くなります。 ([[名無しさん]]) [3] [[WinIE 6]] は、未対応の[[擬似クラス]]を [CODE(CSS)@en[:[[unknown]]]] に置き換え (て [[CSSOM]] の一部に含め) ます。 [PRE(CSS bad example code)[ a:xxxx, b { color: red } ]PRE] では、 [[CSS 2.1]] 的には[[宣言ブロック]]全体が無視されるべきですが、 [[WinIE 6]] では [CODE(HTMLe)@en[[[b]]]] が[[赤]]くなります。 ([[名無しさん]]) [4] [[WinIE 6]] の [CODE(DOMa)@en[[[selectorText]]]] 決定[[算法]]: = [[字句化]]し、[[正規化]]する。例えば [[escape]] を[[復号]]する。 [CODE(charname)@en[[[NULL]]]] は除去する ([[CSSの字句化]]を参照)。 == ここで、 [CODE(CSS)@en[\:]] は [[escape]] されたままとする。 なお、 [CODE(CSS)@en[\00003a]] は [CODE(CSS)@en[:]] に[[復号]]するし、 [CODE(CSS)@en[\\\00003a]] と前者は同じではない。 = 前項で得られた[[字句]]列が、[[選択子群]]全体として ([[WinIE 6]] が理解できる) 構文に適合するかを調べる。適合しなければ、 [CODE(CSS)@en[[[UNKNOWN]]]] を返す。 == 前項で残した [CODE(CSS)@en[\:]] は、 [[型選択子]]中の先頭以外の場所に高々1回だけ出現できる。 それ以外に出現するなら不適合。 = 各[[単純選択子列]]について、 == [[普遍選択子]]があれば、除去する。 === [[普遍選択子]]が[[選択子群]]に含まれる唯一の構成要素なら、[[空文字列]]になる。 == [[型選択子]]が既知の [[HTML]] [[要素型名]]なら、[[大文字]]に変換する。 === ただし、 (少なくても) [CODE(HTMLe)@en[[[xml]]]] は[[大文字]]に変換しない。 === [CODE(HTMLe)@en[[[abbr]]]] は未知。 [CODE(HTMLe)@en[[[q]]]] は未知。[CODE(HTMLe)@en[[[isindex]]]], [CODE(HTMLe)@en[[[rt]]]], [CODE(HTMLe)@en[[[comment]]]] は既知、 [CODE(HTMLe)@en[[[rb]]]] は未知。[CODE(HTMLe)@en[[[image]]]] は [CODE(CSS)@en[[[IMG]]]] に変換される。 == [[クラス選択子]]が複数あれば、最後に指定されたもののみを残して除去する。 == [[識別子選択子]]が複数あれば、最後に指定されたもののみを残して除去する。 == 既知の[[擬似クラス]]が複数あれば、最後に指定されたもののみを残して除去する。 == 未知の[[擬似クラス]]や[[擬似クラス]] ([CODE(CSS)@en[[[:]]]] とその後に続く [CODE(CSS)@en[[[IDENT]]]] または [CODE(CSS)@en[[[:]]]] のみ) は未知なら[CODE(CSS)@en[:[[unknown]]]] に置き換える。 === 例えば [CODE(CSS)@en[::[[first-letter]]]] は [CODE(CSS)@en[:]] と [CODE(CSS)@en[:[[first-letter]]]] の連続とみなされ、前者は [CODE(CSS)@en[:[[unknown]]]] と解釈され、 それが後者により上書きされ、結局 [CODE(CSS)@en[:[[first-letter]]]] になる。 === ただし、 [CODE(CSS)@en[:]] が[[単純選択子列]]の末尾に来るのはこの[[算法]]全体の2項目の場合に該当し、[[選択子群]]全体が [CODE(CSS)@en[[[UNKNOWN]]]] となる。 === [[擬似要素]]は[[単純選択子列]]や[[選択子]]の末尾でなくても構わない。 == 以上で残ったものを、[[型選択子]]、[[クラス選択子]]、[[識別子選択子]]、既知の[[擬似クラス]]、未知の[[擬似クラス]]・[[擬似要素]]の順に並べる。 == 前項の結果を返す。 ([[名無しさん]]) [5] [[Firefox]] 1.5, 2 は [CODE(CSS)@en[@[[namespace]]]] が使われていて [CODE(DOMa)@en[[[selectorText]]]] の[[型選択子]]に[[名前空間接頭辞]]を付ける場合、 なぜか [CODE(CSS)@en[:[[not]]()]] [[擬似クラス]]にも[[名前空間接頭辞]]を付けます。 他の[[擬似クラス]]の場合にはつけないようですし、 [[括弧]]の中身にも関係無しに付けるようです ([[括弧]]の中に[[型選択子]]があれば、それにもちゃんと[[名前空間接頭辞]]をつけます)。 ([[名無しさん]]) [6] [[Opera]] 9 は[[普遍選択子]]が明示的または暗示的に用いられている場合 (明示的に用いられていても、それが唯一の{[[単純選択子]]|[[擬似要素]]}である場合以外、 [CODE(DOMa)@en[[[selectorText]]]] には現れません。) で、 [CODE(CSS)@en[@[[namespace]]]] が使われていて[[型選択子]]等に[[名前空間接頭辞]]を付ける場合、省略されている[[普遍選択子]]には [CODE(CSS)[|]] だけをつけます。例えば、 [PRE(CSS example code)[ @namespace 'http://www.example.com/'; .a {} ]PRE] だと [PRE(CSS example code illegal)[ |.a { } ]PRE] になります。 ([[名無しさん]]) [7] >>6 [[Firefox]] 2 も同じで、こちらは[[普遍選択子]]を省略しないので、 [PRE(CSS illegal example code)[ *|.a { } ]PRE] になります。 ([[名無しさん]]) [8] [[WinIE 6]] は、未対応の[[擬似クラス]]を [CODE(CSS)@en[:[[unknown]]]] に置き換え (て [[CSSOM]] の一部に含め) ます。 [PRE(CSS bad example code)[ a:xxxx, b { color: red } ]PRE] では、 [[CSS 2.1]] 的には[[宣言ブロック]]全体が無視されるべきですが、 [[WinIE 6]] では [CODE(HTMLe)@en[[[b]]]] が[[赤]]くなります。 ([[名無しさん]]) [9] [[Firefox]] 2 の [CODE(DOMa)@en[[[selectorText]]]]: - → [CODE(CSS)@en[*::]] - → [CODE(CSS)@en[a:]] - → [CODE(CSS)@en[*::b]] [CODE(charname)@en[[[COLON]]]] の扱いが謎。 ([[名無しさん]]) [10] → [CODE(CSS)@en[a::]] ([[名無しさん]]) [11] >>4 は不完全のようです。 >>9 を [[WinIE 6]] に与えると [CODE(CSS)@en[[[UNKNOWN]]]] になりますが、 >>10 を [[WinIE 6]] に与えると [CODE(CSS)@en[a\:]] になります。 ([[名無しさん]]) [12] >>11 は [CODE(CSS)@en[a\:b]] になります。 だと [CODE(CSS)@en[[[UNKNOWN]]]] になります。どうも、 [[WinIE 6]] は [CODE(CSS)@en[\:]] を1つの[[字句]]とみなしている (そして前後の[[空白]]を無視する) ようですね。 ([[名無しさん]]) [13] のように [CODE(CSS)@en[\:]] の後に[[注釈]]が入ると、[[子孫]][[結合子]]があるものとして扱うようです。 のように [CODE(CSS)@en[\:]] の前に[[注釈]]が入った時は[[注釈]]を無視するようです。 のように[[注釈]]の後に[[空白]]が入っても無視されますが、 のように[[注釈]]の前に[[空白]]が入ると[[子孫]][[結合子]]とみなされるらしく、 [CODE(CSS)@en[[[UNKNOWN]]]] になります。 ([[名無しさん]]) [14] >>5 の例 ([CODE(CSS example)@en[a:[[not]](a)]]): [CODE(CSS example invalid)@en[*|a*|:[[not]](*|a)]] ([[名無しさん]])