selectorText

selectorText

[1] WinIE 6 は、選択子に構文的に未対応なものが含まれていると、選択子 (の) 全体、つまり selectorTextUNKNOWN に置き換え (て CSSOM の一部に含め) ます。 (名無しさん)

[2] WinIE 6 は、未対応の擬似クラス:unknown に置き換え (て CSSOM の一部に含め) ます。

a:xxxx, b { color: red }

では、 CSS 2.1 的には宣言ブロック全体が無視されるべきですが、 WinIE 6 では bくなります。 (名無しさん)

[3] WinIE 6 は、未対応の擬似クラス:unknown に置き換え (て CSSOM の一部に含め) ます。

a:xxxx, b { color: red }

では、 CSS 2.1 的には宣言ブロック全体が無視されるべきですが、 WinIE 6 では bくなります。 (名無しさん)

[4] WinIE 6selectorText 決定算法:

  1. 字句化し、正規化する。例えば escape復号する。 NULL は除去する (CSSの字句化を参照)。
    1. ここで、 \:escape されたままとする。 なお、 \00003a:復号するし、 \\\00003a と前者は同じではない。
  2. 前項で得られた字句列が、選択子群全体として (WinIE 6 が理解できる) 構文に適合するかを調べる。適合しなければ、 UNKNOWN を返す。
    1. 前項で残した \: は、 型選択子中の先頭以外の場所に高々1回だけ出現できる。 それ以外に出現するなら不適合。
  3. 単純選択子列について、
    1. 普遍選択子があれば、除去する。
      1. 普遍選択子選択子群に含まれる唯一の構成要素なら、空文字列になる。
    2. 型選択子が既知の HTML 要素型名なら、大文字に変換する。
      1. ただし、 (少なくても) xml大文字に変換しない。
      2. abbr は未知。 q は未知。isindex, rt, comment は既知、 rb は未知。imageIMG に変換される。
    3. クラス選択子が複数あれば、最後に指定されたもののみを残して除去する。
    4. 識別子選択子が複数あれば、最後に指定されたもののみを残して除去する。
    5. 既知の擬似クラスが複数あれば、最後に指定されたもののみを残して除去する。
    6. 未知の擬似クラス擬似クラス (: とその後に続く IDENT または : のみ) は未知なら:unknown に置き換える。
      1. 例えば ::first-letter::first-letter の連続とみなされ、前者は :unknown と解釈され、 それが後者により上書きされ、結局 :first-letter になる。
      2. ただし、 :単純選択子列の末尾に来るのはこの算法全体の2項目の場合に該当し、選択子群全体が UNKNOWN となる。
      3. 擬似要素単純選択子列選択子の末尾でなくても構わない。
    7. 以上で残ったものを、型選択子クラス選択子識別子選択子、既知の擬似クラス、未知の擬似クラス擬似要素の順に並べる。
    8. 前項の結果を返す。

(名無しさん)

[5] Firefox 1.5, 2 は @namespace が使われていて selectorText型選択子名前空間接頭辞を付ける場合、 なぜか :not() 擬似クラスにも名前空間接頭辞を付けます。 他の擬似クラスの場合にはつけないようですし、 括弧の中身にも関係無しに付けるようです (括弧の中に型選択子があれば、それにもちゃんと名前空間接頭辞をつけます)。 (名無しさん)

[6] Opera 9 は普遍選択子が明示的または暗示的に用いられている場合 (明示的に用いられていても、それが唯一の{単純選択子|擬似要素}である場合以外、 selectorText には現れません。) で、 @namespace が使われていて型選択子等に名前空間接頭辞を付ける場合、省略されている普遍選択子には | だけをつけます。例えば、

@namespace 'http://www.example.com/';
.a {}

だと

|.a {  }

になります。

(名無しさん)

[7] >>6 Firefox 2 も同じで、こちらは普遍選択子を省略しないので、

*|.a {  }

になります。 (名無しさん)

[8] WinIE 6 は、未対応の擬似クラス:unknown に置き換え (て CSSOM の一部に含め) ます。

a:xxxx, b { color: red }

では、 CSS 2.1 的には宣言ブロック全体が無視されるべきですが、 WinIE 6 では bくなります。 (名無しさん)

[9] Firefox 2 の selectorText:

COLON の扱いが謎。 (名無しさん)

[10] <http://suika.fam.cx/gate/2007/cssom/viewer?c=a%20%5C%3A%20%7B%0A%20%20color%3A%20red%3B%0A%7D;h=%3Cp%3EAAAA%3C%2Fa%3E;p=n;x=style-element>a::

(名無しさん)

[11] >>4 は不完全のようです。 >>9WinIE 6 に与えると UNKNOWN になりますが、 >>10WinIE 6 に与えると a\: になります。 (名無しさん)

[12] >>11 <http://suika.fam.cx/gate/2007/cssom/viewer.en.html?c=a%20%5C%3A%20b%20%7B%0D%0A%20%20color%3A%20red%3B%0D%0A%7D;h=%3Cp%3EAAAA%3C%2Fa%3E;p=n;x=style-element>a\:b になります。 <http://suika.fam.cx/gate/2007/cssom/viewer.en.html?c=a%20%5C%3A%20b%20%5C%3A%20e%20%7B%0D%0A%20%20color%3A%20red%3B%0D%0A%7D;h=%3Cp%3EAAAA%3C%2Fa%3E;p=n;x=style-element><http://suika.fam.cx/gate/2007/cssom/viewer.en.html?c=a%20%5C%3A%20b%20%5C%3A%20e%20%7B%0D%0A%20%20color%3A%20red%3B%0D%0A%7D;h=%3Cp%3EAAAA%3C%2Fa%3E;p=n;x=style-element> だと UNKNOWN になります。どうも、 WinIE 6\: を1つの字句とみなしている (そして前後の空白を無視する) ようですね。 (名無しさん)

[13] <http://suika.fam.cx/gate/2007/cssom/viewer.en.html?c=a%5C%3A%2F**%2Fb%20%7B%0D%0A%20%20color%3A%20red%3B%0D%0A%7D;h=%3Cp%3EAAAA%3C%2Fa%3E;p=n;x=style-element> のように \: の後に注釈が入ると、子孫結合子があるものとして扱うようです。 <http://suika.fam.cx/gate/2007/cssom/viewer.en.html?c=a%2F**%2F%5C%3Ab%20%7B%0D%0A%20%20color%3A%20red%3B%0D%0A%7D;h=%3Cp%3EAAAA%3C%2Fa%3E;p=n;x=style-element> のように \: の前に注釈が入った時は注釈を無視するようです。 <http://suika.fam.cx/gate/2007/cssom/viewer.en.html?c=a%2F**%2F%20%5C%3Ab%20%7B%0D%0A%20%20color%3A%20red%3B%0D%0A%7D;h=%3Cp%3EAAAA%3C%2Fa%3E;p=n;x=style-element> のように注釈の後に空白が入っても無視されますが、 <http://suika.fam.cx/gate/2007/cssom/viewer.en.html?c=a%20%2F**%2F%5C%3Ab%20%7B%0D%0A%20%20color%3A%20red%3B%0D%0A%7D;h=%3Cp%3EAAAA%3C%2Fa%3E;p=n;x=style-element> のように注釈の前に空白が入ると子孫結合子とみなされるらしく、 UNKNOWN になります。 (名無しさん)

[14] >>5 の例 (a:not(a)): *|a*|:not(*|a)

(名無しさん)

[15] HTML における大文字小文字

(名無しさん)

[16] Opera 9 は :lang()引数部を括弧もろとも selectorText には出しません。 Firefox 2 は大文字小文字変換なし

(名無しさん)

[17] >>15 属性名正規化では、要素型名との対応はチェックしていないようです。

XML 文書内のスタイル・シートでは、 Firefox 2 も Opera 9 も要素型名属性名大文字小文字を保存するようです。 (名無しさん)

[18] Opera 9 は単純選択子の順序を保存します。

Firefox 2 は

  1. 型選択子普遍選択子
  2. 識別子選択子
  3. クラス選択子
  4. 属性選択子
  5. 擬似クラス
  6. 擬似要素

の順に並べ替えます。同じ種類の単純選択子同士の順序は保存するようです。

(名無しさん)

[19] Firefox 2, Opera 9 とも、 擬似要素の前が :: となっていた場合、 :正規化します。 注釈空白escape はすべて除去します。 属性値はすべて " 区切り正規化します。 (名無しさん)

[20] Firefox 2, Opera 9 とも、選択子の区切りは COMMA SPACE正規化します。 (名無しさん)

[21] Firefox 2 は型選択子なき場合必ず普遍選択子をつけますが、 Opera 9 はそれ以外に単純選択子擬似要素がまったくない場合を除き、 普遍選択子を除去します。 (名無しさん)

[22] Opera 9 で HTML 文書だと、なぜか15文字を超える属性名空文字列に変換されてしまいます (XML 文書ではそうならないので、小文字正規化の部分がおかしい?)。 (名無しさん)

[23] Opera 9 で HTML 文書だと、なぜか15文字を超える属性名空文字列に変換されてしまいます (XML 文書ではそうならないので、小文字正規化の部分がおかしい?)。 (名無しさん)

[24] Opera 9 で HTML 文書だと、なぜか15文字を超える属性名空文字列に変換されてしまいます (XML 文書ではそうならないので、小文字正規化の部分がおかしい?)。 (名無しさん)

[25] Firefox 2、Opera 9 共に、 @namespace がない場合、 名前空間接頭辞である | (空文字列) はそのまま保存され、 *| は除去されます。

要素型名はともかく、属性名*| を除去すると意味が変わってしまうのですが、 どちらのブラウザも内部的には区別を保持したままのようです。

<http://suika.fam.cx/gate/2007/cssom/viewer?c=%5B*%7Cblank%5D%20%7B%0A%20%20color%3A%20green%3B%0A%7D%0A%5B%7Cblank%5D%20%7B%0A%20%20color%3A%20red%3B%0A%7D%0A;h=%3Cp%20onclick%3D%22setAttributeNS%20('about%3A'%2C%20'about%3Ablank'%2C%20'test')%22%3Eclick%20here%20to%20set%20%3Ccode%3Eabout%3Ablank%3C%2Fcode%3E%20attribute%20to%20this%20element.%3C%2Fp%3E;p=n;x=style-element>

(名無しさん)

[26] >>25 訂正。どちらのブラウザでも、属性名| (空文字列名前空間接頭辞) は除去されます。

(名無しさん)

[27] 名前空間接頭辞正規化については @namespace の項にも調べた結果があります。 (名無しさん)

[28]

a[b] {} |a[|b] {} *|a[*|b] {} a|a[a|b] {}

に対応する selectorText がどうなるか?

@namespace なし:

既定名前空間のみあり:

名前空間接頭辞 a のみあり:

既定名前空間名前空間接頭辞 a もあり:

(名無しさん)

[29] Firefox 2 も Opera 9 も子孫結合子SPACE 1つに正規化します。また、その他の結合子は前後に SPACE 1つずつに正規化します。 (名無しさん)

[30] Firefox 2 も Opera 9 も子孫結合子SPACE 1つに正規化します。また、その他の結合子は前後に SPACE 1つずつに正規化します。 (名無しさん)

[31] Firefox 2 も Opera 9 も子孫結合子SPACE 1つに正規化します。また、その他の結合子は前後に SPACE 1つずつに正規化します。 (名無しさん)

[32] Firefox 2 も Opera 9 も子孫結合子SPACE 1つに正規化します。また、その他の結合子は前後に SPACE 1つずつに正規化します。 (名無しさん)

[33] >>21Opera 9 の動作は名前空間接頭辞の存在と独立なので、 @namespace 'x'; [a] の [a] にも | だけがついて |[a] になってしまいます。 (名無しさん)

[34] Firefox 2、 HTML 文書では、 @namespace の有無と大文字小文字正規化は関係していないようです。 XML 文書では全部保存されます。

Opera 9 では、

であれば大文字小文字を無視し、その他の場合には大文字小文字を保存するようです。

(名無しさん)

[35] >>28 の変化については、無視される非妥当@namespace 規則は考慮されないようです。 (名無しさん)