-
Notifications
You must be signed in to change notification settings - Fork 4
/
353.txt
123 lines (97 loc) · 5.21 KB
/
353.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
[6] [DFN[[CODE(CSS)@en[[[:not()]]]]]] [[擬似クラス]]は[[否定]]を表します。
* 仕様書
[REFS[
- [7] [CITE@en[Selectors Level 3]] ([TIME[2011-09-29 22:16:17 +09:00]] 版) <http://www.w3.org/TR/selectors/#negation>
]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]] 版) <http://www.w3.org/TR/2001/WD-css3-selectors-20010126/#negation>
]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[
- <http://suika.fam.cx/gate/2007/cssom/viewer?c=%3A%2F**%2Fnot(a)%20%7B%7D;h=;p=n;x=style-element>
([CODE(CSS example)@en[:/**/not(]])
- <http://suika.fam.cx/gate/2007/cssom/viewer?c=%3A%5Cnot(a)%20%7B%7D;h=;p=n;x=style-element>
([CODE(CSS example)@en[:\not(]])
- <http://suika.fam.cx/gate/2007/cssom/viewer?c=%3An%5C4f%20t(a)%20%7B%7D;h=;p=n;x=style-element>
([CODE(CSS example)@en[:n\4f t(]])
]REFS]
[5]
>>4 の例は[[字句]]的に [CODE(CSS)@en[[[NOT]]]] ではなく、
[CODE(CSS)@en[[[FUNCTION]]]] であるとしても (一応)
[[選択子]]仕様書の構文に適合しますが、これはそうではありません:
[REFS[
- <http://suika.fam.cx/gate/2007/cssom/viewer?c=%3A%2F**%2Fnot(%3Alink)%20%7B%7D%0A;h=;p=n;x=style-element>
]REFS]
[16] >>4, >>5 は [[Chrome]] も [[Firefox]] はいずれも [CODE(CSS)@en[[[:not()]]]]
であると解釈します。ただし >>4 の3つ目は [[Chrome]] で開くとブラウザが落ちます。
[TIME[2011-11-03T13:02:08.400Z]]
[17] [CODE(CSS)@en[[[not]]]] と [CODE(CSS)[[[(]]]] の間に[[注釈]]を入れるのは仕様上も
[[Firefox]] も [[Chrome]] も[[非妥当]]扱いです。
[REFS[
- [18] <http://suika.fam.cx/gate/2007/cssom/viewer?c=%3Anot%2F**%2F(a)%20%7B%20color%3A%20red%20%7D;h=%3Cp%3EThis%20paragraph%20must%20not%20be%20red.;p=n;x=style-element;i=html-div>
]REFS]
* メモ