[1] [DFN[[RUBYB[[[型選択子]]]@en[type selector]]]]は、[[CSS修飾名]]によって[[マーク付け言語]]の[[要素型]]の名前を表したものです
[SRC[>>2]]。

* 仕様書

[REFS[
- [2] [CITE@en[Selectors Level 3]] ([TIME[2011-09-29 22:16:17 +09:00]] 版) <http://www.w3.org/TR/selectors/#type-selectors>
- [29] [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>
- [35] [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]

* 意味

[3] [[名前空間接頭辞]]を除いた部分 ([CODE(CSS)[[[|]]]] よりも後の部分) は[[要素]]の[[局所名]]を表しています
[SRC[>>2]]。

;; [4] 仕様書は[[名前空間]]に対応していれば [SRC[>>2]] という前提でそうなっていますが、
対応していない場合にどう解釈されるか明示的に規定していません。現実には最新の 
[[Webブラウザー]]は[[名前空間]]に対応したものばかりなのでもはや規定する意味はないのでしょうが。

[EG[
[10] [CODE(CSS)[h1]] は[[局所名]]が「[CODE[h1]]」である[[要素]]を表します。
]EG]

[5] [[名前空間接頭辞]]は、それに対応すると[[宣言]]された[[名前空間URL]]を表しています。
[[CSS]] では [CODE(CSS)@en[[[@nemaspace]]]] [[@規則]]で、 [[XBL2]]
では [CODE(XMLa)@en[[[xmlns]]]] [[属性]]で[[名前空間接頭辞]]を[[宣言]]できます。

[EG[
[13] 
[PRE(CSS example code)[
@namespace hoge 'http://hoge/';
hoge|fuga { color: blue }
]PRE]
... は [CODE(URI)@en[http://hoge/]] という[[名前空間]]の[[局所名]] [CODE[fuga]]
の[[要素]]の色を指定しています。
]EG]

[7] [[名前空間接頭辞]]が[[空文字列]]であれば、[[名前空間]]なし ([[null名前空間]])
を表します [SRC[>>2]]。

[EG[
[14] [CODE(CSS)@en[|h1]] は[[null名前空間]]の[[局所名]] [CODE(CSS)[h1]]
の[[要素]]を表しています。
]EG]

[8] [[名前空間接頭辞]]が [CODE(CSS)[[[*]]]] であれば、任意の[[名前空間]]を表します。
[[null名前空間]]もこれに含まれます。 [SRC[>>2]]

[EG[
[15] [CODE(CSS)[*|h1]] は [[HTML]] や [[XHTML2]] やその他任意の[[名前空間]]の [CODE(HTML)@en[h1]]
[[要素]]を表しています。
]EG]

[9] [[名前空間接頭辞]]も [CODE(CSS)[[[|]]]] もなければ、[[既定名前空間]]が[[宣言]]されていればその[[名前空間]]を、
[[宣言]]されていなければすべての[[名前空間]] ([CODE(CSS)[[[*]]]] と同じ。) を表します。 [SRC[>>2]]

[EG[
[16] 
[PRE(CSS example code)[
h1 { color: blue }
]PRE]
... はすべての[[名前空間]]の [CODE(CSS)[h1]] [[要素]]を表しています。一方
[PRE(CSS example code)[
@namespace 'http://www.w3.org/1999/xhtml';
h1 { color: blue }
]PRE]
... は [[HTML]] の [CODE(HTMLe)@en[h1]] [[要素]]だけを表しています。
]EG]

** WebVTT

[36] [[WebVTT]] では[[WebVTT中間節点オブジェクト]]が[[空文字列]]の[[名前空間]]に属する特定の[[要素名]]の[[要素]]であるものとして扱われます。
[SRC[>>35]]

* 妥当性

[6] [[宣言]]されていない[[名前空間接頭辞]]を使うと[[非妥当]]となります [SRC[>>2]]。

* 大文字と小文字

[11] [[局所名]]の[[大文字]]と[[小文字]]の解釈は[[マーク付け言語]]に依存します。

[30] [[HTML文書]]中の[[HTML要素]]では[[ASCII大文字・小文字不区別]]です。それ以外、すなわち [[XML文書]]の[[要素]]や
[[HTML文書]]中の [[HTML]] 以外の[[要素]]では[[大文字]]と[[小文字]]を区別します。

[39] これは厳密には次のようにしなければ[['''ならない''']] [SRC[>>29]] と定義されています。
- [40] [[HTML文書]]の[[HTML要素]]に対しては、[[型選択子]]を[[ASCII小文字]]に変換します。
- [41] それ以外に対しては、元々の[[型選択子]]を使います。
- [42] いずれにせよ、比較自体は大文字と小文字を区別して行います。

[43] つまり[[HTML文書]]中の[[HTML要素]]に関する限り [[CSS]] 側の大文字と小文字の違いは無視されますが、
[[DOM]] 側では小文字でなければならず ([[HTML構文解析器]]が作った[[要素]]は必ずそうなっています)、
大文字を含む[[要素]]に一致することはありません。

[12] [[名前空間接頭辞]]は[[大文字]]と[[小文字]]を区別します。

* 歴史

** CSS1

[REFS[
- [27] [CITE[Cascading Style Sheets: a draft specification]] ([TIME[1995-05-31 21:05:57 +09:00]] 版) <http://www.w3.org/Style/CSS/draft1.html#granularity>
]REFS]

[28] [[型選択子]]に相当するものは、特に名前はありませんでしたが、最初期から [[CSS]]
に含まれていました。

** CSS2

[REFS[
- [25] [CITE@en[Selectors]] ([TIME[2001-01-16 00:22:58 +09:00]] 版) <http://www.w3.org/TR/1998/WD-css2-19980128/selector.html#type-selectors>
- [18] [CITE@en[Selectors]] ([TIME[2011-06-07 22:09:52 +09:00]] 版) <http://www.w3.org/TR/CSS2/selector.html#type-selectors>
]REFS]

[26] 「[[型選択子]]」という名前の仕様上の初出は >>25 です。それまでは明確な名称がありませんでした。

[20] [[CSS2]] まで[[型選択子]]と[[名前空間]]の関係は規定されていませんでした。 [[IE]]
などは[[要素]]の[[修飾名]]と[[型選択子]]で[[一致]]するか判定する実装になっていました。

;; [21] そのことが >>22 や初期の[[選択子3]]には参考として含まれていましたが、最終版からは削除されています。

[34] [[SVG 1.1]] は [[CSS2]] を使っていますが、[[型選択子]]について[[局所名]]のみ[[一致]]に使うと規定していました
[SRC[>>33]]。

[REFS[
- [33] [CITE[Styling – SVG 1.1 (Second Edition)]] ([TIME[2011-08-10 12:35:27 +09:00]] 版) <http://www.w3.org/TR/SVG/styling.html#StylingWithCSS>
]REFS]

** 選択子3

[REFS[
- [22] [CITE[CSS Namespace Enhancements (Proposal)]] ([TIME[1999-06-26 07:15:29 +09:00]] 版) <http://www.w3.org/1999/06/25/WD-css3-namespace-19990625/#tag-selector>
- [24] [CITE@en[CSS3 module: W3C Selectors]] ([TIME[2000-04-11 01:57:05 +09:00]] 版) <http://www.w3.org/TR/2000/WD-css3-selectors-20000410#type-selectors>
]REFS]

[23] [[名前空間接頭辞]]をつけて[[名前空間]]に対応させることが >>22 で提案され、 >>24
で[[選択子3]]仕様に取り込まれました。

[32] [[名前空間接頭辞]]は当初は[[大文字]]と[[小文字]]を区別しないことになっていましたが、
最終的には区別することになりました。

** HTML

[31] [[選択子]]仕様書は[[要素名]]の[[大文字]]と[[小文字]]は[[マーク付け言語]]に依存するとして、
[[HTML]] と [[XML]] について例を挙げるにとどまっていますが、 [[HTML]] 仕様書がかわりにこれを規定するようになりました。
[[HTML]] の仕様書とは言え、 [[HTML]] と [[XML]] のすべての[[要素]]の扱いを規定しています。

** WebVTT (2010)

[37] [[WebVTT]] 仕様書は[[選択子]]を [[WebVTT]] に対して適用する場合の解釈を規定しました。

* 関連

[17] [[局所名]]のかわりに [CODE(CSS)[[[*]]]] を指定したものは[[普遍選択子]]と呼ばれます。

[38] [CITE@en[Web Applications 1.0 r8253     Match reality better in terms of selector case-sensitivity]]
( ([TIME[2013-11-07 04:38:00 +09:00]] 版))
<http://html5.org/tools/web-apps-tracker?from=8252&to=8253>

[44] [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[Gloss the term "type selector" · whatwg/html@1e783c9]]
([TIME[2016-03-02 15:14:19 +09:00]] 版)
<https://github.com/whatwg/html/commit/1e783c9fd70b7e6c02775788a487fe88f4658bbc>