[6] [DFN[[CODE(CSS)@en[[[:not()]]]]]] [[擬似クラス]]は[[否定]]を表します。 * 仕様書 [REFS[ - [7] [CITE@en[Selectors Level 3]] ([TIME[2011-09-29 22:16:17 +09:00]] 版) ]REFS] * 意味 [8] [CODE(CSS)@en[[[:not()]]]] は引数によって表されない[[要素]]を表します [SRC[>>7]]。 * 引数 [9] 引数には[[単純選択子]]をちょうど1つだけ指定できます。ただし [CODE(CSS)@en[[[:not()]]]] 自体を入れ子にすることはできません。 [SRC[>>7]] [10] 引数は[[単純選択子]]1つであって、[[単純選択子列]]ではありません。 [EG[ [11] 従って、 [PRE(CSS bad example code)[ :not(.hoge.fuga) ]PRE] ... は認められていません。 ]EG] [EG[ [12] また、[[単純選択子列]]の場合とは異なり、暗黙の[[普遍選択子]]は存在しません。 従って[[普遍選択子]]に対する[[既定名前空間]]の適用の影響も、もちろんありません。例えば [PRE(CSS example code)[ @namespace 'http://hoge/'; *|*:not(.foo) ]PRE] ... は [CODE(URI)[http://hoge/]] のすべての [[class属性]]が [CODE(CSS)[foo]] の[[要素]]以外''ではなく''、 ''すべての[[名前空間]]''のすべての [[class属性]]が [CODE(CSS)[foo]] の[[要素]]以外を表しています。 ]EG] * 特異度 [13] [CODE(CSS)@en[[[:not()]]]] [[擬似クラス]]は他の[[擬似クラス]]と違ってそれ自体は[[特異度]]の計算に含まれません。 [[引数]]として指定された[[単純選択子]]は計算に含まれます。 * 歴史 ** 選択子3 [REFS[ - [14] [CITE@en[CSS3 module: W3C Selectors]] ([TIME[2001-01-29 23:57:00 +09:00]] 版) ]REFS] [15] >>14 で [CODE(CSS)@en[[[:not()]]]] が追加されました。この前の版まで、 [CODE(CSS)@en[[[:first-child]]]] に対して [CODE(CSS)@en[[[:not-first-child]]]] など、一部の[[擬似クラス]]だけ否定形が別個に定義されていましたが、 [CODE(CSS)@en[[[:not()]]]] の導入によりそれらは削除されています。 * 実装 [1] [[Firefox]] 2 は [PRE(CSS bad example code)[ *:not() { } ]PRE] のように[[引数]]がないと、勝手に[[普遍識別子]] [CODE(CSS)@en[[[*]]]] を補うようです。ですが、 [PRE(CSS bad example code)[ :not() { } ]PRE] のように[[単純選択子列]]の唯一の構成要素が [CODE(CSS)@en[:[[not]]()]] だと、不正な[[選択子群]]として無視するようです。 (前でも後でも、他の[[単純選択子]]や[[擬似要素]]が指定されていればおk。[[引数]]が指定されていれば唯一の[[単純選択子]]であってもおk。 [CODE(CSS)@en[:[[not]]():[[not]]()]] は''だめ''ですが、 [CODE(CSS)@en[:[[not]](*):[[not]]()]] や [CODE(CSS)@en[:[[not]]():[[not]](*)]] ならおk。) ([[名無しさん]]) [2] >>1 無視すると書きましたが、[[選択子]] (や[[選択子群]]) の最初の[[単純選択子]]が [CODE(CSS)@en[:[[not]]()]] の場合は[[宣言ブロック]]ごと無視され、 [[選択子]]の2つ目以降かつ最後の[[単純選択子列]]が [CODE(CSS)@en[:[[not]]()]] の場合にはその[[単純選択子列]]の存在だけが無視され、 [[選択子]]の2つ目以降かつ最後で''ない''[[単純選択子列]]が [CODE(CSS)@en[:[[not]]()]] の場合にはその[[宣言ブロック]]全体が無視されます。 ([[名無しさん]]) [3] [[選択子]]仕様書では [CODE(CSS)@en[:[[not]]()]] は特別な[[字句]] [CODE(CSS)@en[[[NOT]]]] として定義されています。 ([[名無しさん]]) [4] >>3 ですが、 [[Firefox]] 2 は特別扱いしていないようです。 [CODE(CSS)@en[[[not]](]] の部分は [CODE(CSS)@en[[[FUNCTION]]]] と解釈しているようです。 [REFS[ - ([CODE(CSS example)@en[:/**/not(]]) - ([CODE(CSS example)@en[:\not(]]) - ([CODE(CSS example)@en[:n\4f t(]]) ]REFS] [5] >>4 の例は[[字句]]的に [CODE(CSS)@en[[[NOT]]]] ではなく、 [CODE(CSS)@en[[[FUNCTION]]]] であるとしても (一応) [[選択子]]仕様書の構文に適合しますが、これはそうではありません: [REFS[ - ]REFS] [16] >>4, >>5 は [[Chrome]] も [[Firefox]] はいずれも [CODE(CSS)@en[[[:not()]]]] であると解釈します。ただし >>4 の3つ目は [[Chrome]] で開くとブラウザが落ちます。 [TIME[2011-11-03T13:02:08.400Z]] * メモ