[2] [DFN[ID[RUBYB[選択子]@en[selector]]]]は、指定された[[識別子]]を持つ[[要素]]に[[一致]]します。

* 仕様書

[REFS[
- [1] [CITE@en[Selectors Level 3]] ([TIME[2011-09-29 22:16:17 +09:00]] 版) <http://www.w3.org/TR/selectors/#id-selectors>
- [95] [CITE@en-US-x-hixie[HTML Standard]] ([TIME[2011-11-12 00:22:26 +09:00]] 版) <http://www.whatwg.org/specs/web-apps/current-work/#selectors>
- [97] [CITE@en-US-x-hixie[WebVTT Standard]] ([TIME[2011-12-06 00:38:23 +09:00]] 版) <http://dev.w3.org/html5/webvtt/#pseudo-cue-selector>
- [181] [CITE@en[Selectors Level 4]] ([TIME[2014-05-06 18:55:03 +09:00]] 版) <http://dev.w3.org/csswg/selectors/#data-model>
]REFS]

* 意味

[4] [[ID選択子]]は[[識別子]]が一致する[[要素]]と[[一致]]します。

[5] [[識別子]]は[[文書]]中の唯一の[[要素]]に割り当てられた文字列です。
[[HTML]] では [CODE(HTMLa)@en[[[id]]]] [[属性]]によって指定できます。他の[[マーク付け言語]]では他の方法で指定できます。
[SRC[>>1]]

[8] 1つの[[要素]]に複数の[[識別子]]があるかもしれませんが、そのいずれもが[[識別子]]として扱われます。
[SRC[>>1]]

[98] [[WebVTT]] では[[WebVTT節点オブジェクトのリスト]]が [[cue]] の [[text track cue identifier]]
によって表される[[識別子]]を持つものとみなされます。 [SRC[>>97]]

;; [104] [[WebVTT節点オブジェクトのリスト]]は[[要素]]ではなく[[文書節点]]に相当するものであるように >>97
にはあります。 >>4 とは矛盾するかもしれませんが・・・。

* 構文

[3] [[ID選択子]]は、 [CODE(CSS)[[['''#''']]]] の直後に [[CSS]] [[識別子]]を続けたものです [SRC[>>1]]。

[16] [[CSS 2.1]] や[[選択子]]の仕様書上に示された文法では [[HASH]] [[字句]]であり、
[CODE(CSS)[[['''#''']]]] の後に[[名前文字]]を使える ([[識別子]]に使える[[文字]]で、先頭の文字の制約なし)
ということになっています。ですが仕様書本文で >>3 の通り[[識別子]]で[['''なければならない''']]とされているため、
やはり先頭に[[数字]]などを使うことはできません。実際に [[Webブラウザー]]もそのように実装しています。

[REFS[
- [17] <http://suika.fam.cx/gate/2007/cssom/viewer?c=%230123%20%7B%0A%20%20color%3A%20red%3B%0A%7D;h=%3Cp%20id%3D0123%3EThis%20paragraph%20must%20not%20be%20red.;p=n;x=style-element;i=html-div>
]REFS]

;; [18] にも関わらずそのように[[字句化]]されるのは、 [CODE(CSS)[[[<color>]]]] が [CODE(CSS)[[['''#''']]]]
の後に[[十六進数]]が続く構文を使っているためです。

* 識別子の指定

[6] [[選択子]]の仕様としては[[利用者エージェント]]がどのように[[識別子]]を知るかは規定しないとしています。
ハードコード、[[DTD]]、[[利用者]]にたずねるといった方法が例示されています。
また具体的な例として、 [[DOM3 Core]] ([CODE(DOMa)@en[[[isId]]]] など) や
[CODE(XMLa)@en[[[xml:id]]]] も挙げられています。 [SRC[>>1]]

[7] 従って、あるいは [[XML]] の [[DTD]] の[[処理]]が義務付けられていない故、
[[利用者エージェント]]は特定の[[属性]]が[[識別子]]であると知らないかもしれず、
その場合[[著者]]は[[ID選択子]]よりも[[属性選択子]]を使うべきかもしれません。 [SRC[>>1]]

* 大文字と小文字

[93] [[選択子]]仕様書は[[ID選択子]]の[[大文字]]と[[小文字]]について明確に言及していませんが、
[[属性値]]に関する[[選択子]]であり、[[属性値]]の[[大文字]]と[[小文字]]の区別は[[マーク付け言語]]依存との規定があります。

[94] [[奇癖モード]]での比較は[[ASCII大文字・小文字不区別]]です [SRC[>>181]]。

;; [182] それ以外、すなわち [[XML文書]]、[[無奇癖モード]]または[[限定奇癖モード]]について明記している仕様書はありませんが、
区別するものと解されています。

;; [183] [[HTML要素]]以外の[[要素]]も、[[奇癖モード]]では[[大文字]]と[[小文字]]は区別されません。

;; [184] 区別されないのは[[比較]]時点なので、[[CSSOM]] 上は指定されたとおりの[[大文字]]と[[小文字]]のままになります。

* 歴史

** CSS1

[REFS[
- [11] [CITE[Cascading Style Sheets: a draft specification]] ([TIME[1995-10-07 10:35:41 +09:00]] 版) <http://www.w3.org/Style/CSS/draft4.html#id>
- [13] [CITE[Cascading Style Sheets: a draft specification]] ([TIME[1995-11-02 03:04:18 +09:00]] 版) <http://www.w3.org/Style/CSS/draft5.html#id>
- [14] [CITE[Cascading Style Sheets, level 1]] ([TIME[1999-02-05 02:57:01 +09:00]] 版) <http://www.w3.org/TR/WD-css1-951209.html#id>
- [10] [CITE[Cascading Style Sheets, level 1]] ([TIME[2008-04-10 02:23:32 +09:00]] 版) <http://www.w3.org/TR/CSS1/#id-as-selector>
]REFS]

[12] [[ID選択子]]は >>11 ではじめて言及されました。 >>13 で構文が定義されましたが、
これは[[属性選択子]]の[[部分集合]]でした。

[15] >>14 以後は現在と同じ構文になっています。

** CSS2 / 選択子3

[REFS[
- [9] [CITE@en[Selectors]] ([TIME[2011-06-07 22:09:52 +09:00]] 版) <http://www.w3.org/TR/CSS2/selector.html#id-selectors>
- [91] [CITE@en[Selectors Level 3]] ([TIME[2011-09-29 22:16:17 +09:00]] 版) <http://www.w3.org/TR/selectors/#id-selectors>
]REFS]

[92] [[CSS2]] 以降 [[XML]] にも対応しています。 [[CSS 2.1]] と[[選択子3]]は [[DOM3]] などによって複数の [[ID]]
が1つの[[要素]]に与えられ得ることにも言及しています (これは [[CR]] で [[at risk]] とされてましたが、
結局残っています)。

** HTML

[REFS[
- [90] [CITE@en[Web Applications 1.0 r6695     Update selector case-sensitivity matching rules, including dropping the list of magically case-insensitive values.]]
( ([TIME[2011-10-19 08:00:00 +09:00]] 版))
<http://html5.org/tools/web-apps-tracker?from=6694&to=6695>
]REFS]

[96] >>90 でこれまで明記されていなかった [[HTML]] と [[XML]] における
[[ID識別子]]の[[大文字]]と[[小文字]]の扱いが規定されました (>>94)。

** WebVTT (2010)

[REFS[
- [99] [CITE@en-US-x-hixie[WebVTT Standard]] ([TIME[2011-12-06 00:38:23 +09:00]] 版) <http://dev.w3.org/html5/webvtt/#pseudo-cue-selector>
]REFS]

[100] [[WebVTT]] 仕様書は[[ID選択子]]が [[WebVTT]] に適用される場合の解釈を規定しています。

** CSS Images

[101] [[CSS Images]] は [[ID選択子]]が [[ID]] だけでなく[[CSS要素参照識別子]]をも参照すると規定していましたが、
2012年3月に一旦該当する条項が削除されています。

;; [103] [[文書]]に挿入されていない[[要素]]すら参照できるとされていました。

[REFS[
- [102] [CITE@en-US[csswg: changeset 5153:8a651e76cd87]] ([TIME[2012-06-12 14:16:28 +09:00]] 版) <http://dvcs.w3.org/hg/csswg/rev/8a651e76cd87>
]REFS]

** 奇癖モード (2014)

[180] [[奇癖モード]]で[[ASCII大文字・小文字不区別]]なのは[[HTML要素]]に限らないため、
[[HTML Standard]] から [[Selectors]] へと規定が移動されました。

[REFS[
- [177] [CITE@en[Bug 23781 – id and class should be case-insensitive in quirks]] ([TIME[2014-05-09 12:05:36 +09:00]] 版) <https://www.w3.org/Bugs/Public/show_bug.cgi?id=23781>
- [178] [CITE[ID/class quirk moved to Selectors spec. Fixes https://www.w3.org/Bugs/Pu... · cfda1c1 · whatwg/quirks]] ([TIME[2014-05-09 12:05:47 +09:00]] 版) <https://github.com/whatwg/quirks/commit/cfda1c1f6d689072118b8e6a9a023f268d3c76be>
- [179] [CITE@en[Web Applications 1.0 r8610 The quirky class/id selector matching case logic moved to selectors]] ([TIME[2014-05-08 02:49:00 +09:00]] 版) <http://html5.org/tools/web-apps-tracker?from=8609&to=8610>
]REFS]

* 関連

[185] [[ID選択子]]は[[素片識別子]]と似ています。おそらく敢えて似せた構文にしたのでしょうが、
両者に直接の関係はありません。[[ID選択子]]では [[CSS]] の[[エスケープ]]などの構文が適用され、
[[素片識別子]]には [[URL]] の[[パーセント符号化]]などの構文が適用されます。

[186] [CITE@en[Web Applications 1.0 r8764 Try to clarify case matching rules for selectors]]
( ([TIME[2014-09-13 02:48:00 +09:00]] 版))
<http://html5.org/r/8764>

[19] [CITE@en[Clarify case-sensitivity of ID and class attribute selectors]]
([[Zirro]]著, [TIME[2017-06-09 01:26:51 +09:00]])
<https://github.com/whatwg/html/commit/942a9d5b9c0b50bf5bca275e866bb2319ebdca0c>