[3] [DFN[[RUBYB[普遍選択子]@en[universal selector]]]]は、すべての[[要素]]を表す[[単純選択子]]です。

* 仕様書

[REFS[
- [2] [CITE@en[Selectors Level 3]] ([TIME[2011-09-29 22:16:17 +09:00]] 版) <http://www.w3.org/TR/selectors/#universal-selector>
- [40] [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]

* 意味

[5] [[名前空間接頭辞]]は、それに対応すると[[宣言]]された[[名前空間URL]]を表しています。
[[CSS]] では [CODE(CSS)@en[[[@nemaspace]]]] [[@規則]]で、 [[XBL2]]
では [CODE(XMLa)@en[[[xmlns]]]] [[属性]]で[[名前空間接頭辞]]を[[宣言]]できます。

[EG[
[13] 
[PRE(CSS example code)[
@namespace hoge 'http://hoge/';
hoge|* { color: blue }
]PRE]
... は [CODE(URI)@en[http://hoge/]] という[[名前空間]]の[[要素]]の色を指定しています。
]EG]

[7] [[名前空間接頭辞]]が[[空文字列]]であれば、[[名前空間]]なし ([[null名前空間]])
を表します [SRC[>>2]]。

[EG[
[14] [CODE(CSS)@en[|*]] は[[null名前空間]]の[[要素]]を表しています。
]EG]

[8] [[名前空間接頭辞]]が [CODE(CSS)[[[*]]]] であれば、任意の[[名前空間]]の任意の[[要素]]を表します。
[[null名前空間]]もこれに含まれます。 [SRC[>>2]]

[EG[
[15] [CODE(CSS)[*|*]] は [[HTML]] や [[XHTML2]] やその他任意の[[名前空間]]の[[要素]]を表しています。
]EG]

[9] [[名前空間接頭辞]]も [CODE(CSS)[[[|]]]] もなければ、[[既定名前空間]]が[[宣言]]されていればその[[名前空間]]、
[[宣言]]されていなければすべての[[名前空間]] ([CODE(CSS)[[[*]]]] と同じ。) の任意の[[要素]]を表します。 [SRC[>>2]]

[EG[
[16] 
[PRE(CSS example code)[
* { color: blue }
]PRE]
... はすべての[[名前空間]]の任意の[[要素]]を表しています。一方
[PRE(CSS example code)[
@namespace 'http://www.w3.org/1999/xhtml';
* { color: blue }
]PRE]
... は [[HTML]] の任意の[[要素]]だけを表しています。
]EG]

[21] 暗黙の[[普遍選択子]] (>>18) にも[[既定名前空間]]が適用されるので、
一見[[名前空間]]の指定が無いように見えても実際には限定されていることがあります。

[EG[
[22] 例えば、
[PRE(CSS example code)[
@namespace 'http://hoge/';
:first-child { color: blue }
]PRE]
... は [CODE(URI)[http://hoge/]] 名前空間に属し、かつ最初の[[子要素]]であるものの色を変えています。
]EG]

[41] [[WebVTT]] に対して適用される場合、 [[WebVTT中間節点オブジェクト]]が[[要素]]とみなされます。
[[名前空間]]は[[空文字列]]とみなされます。 [SRC[>>40]]

* 構文

[4] [[普遍選択子]]は [[CSS修飾名]]の[[局所名]]が [CODE(CSS)[[[*]]]] であるものです [SRC[>>2]]。

[18] [CODE(CSS)[[[*]]]] のみで構成される[[普遍選択子]] (つまり[[名前空間接頭辞]]と [CODE(CSS)[[[|]]]]
が無いもの) であって、[[単純選択子列]]中に他の[[単純選択子]]も含まれている場合、または直後に[[擬似要素]]がある場合は、
[CODE(CSS)[[[*]]]] を省略できます。 [SRC[>>2]]

[EG[
[19] 例えば [CODE(CSS)[*:first-child]] と [CODE(CSS)@en[:first-child]] は等価です。
また [CODE(CSS)[*::after]] と [CODE(CSS)[::after]] は等価です。
]EG]

;; [20] しかし [CODE(CSS)[[[*]]]] は省略するべきではないと言われています。例えば 
[CODE(CSS)@en[div :first-child]] よりも [CODE(CSS)@en[div *:first-child]] と書いた方がわかりやすいです。
[SRC[>>2]] [[既定名前空間]]の影響も、明示的に書いた方がわかりやすいでしょう。

;; [37] とはいえ現実には [CODE(CSS)[[[*]]]] を明示することはほとんどありません。 >>20 は仕様上の要件ではなく、
単なる参考としての好ましい表現方法の提示に過ぎませんが、それにしても実情に合っていません。

* 大文字と小文字

[12] [[名前空間接頭辞]]は[[大文字]]と[[小文字]]を区別します。

* 妥当性

[6] [[宣言]]されていない[[名前空間接頭辞]]を使うと[[非妥当]]となります [SRC[>>2]]。

* 特異度

[23] [[普遍選択子]]は[[特異度]]の計算に含まれません。[[普遍選択子]]だけの[[選択子]]は他のどんな[[選択子]]よりも低い[[特異度]]になります。

* 歴史

** CSS1

[REFS[
- [34] [CITE[Cascading Style Sheets: a draft specification]] ([TIME[1995-05-31 21:05:57 +09:00]] 版) <http://www.w3.org/Style/CSS/draft1.html#document-wide>
]REFS]

[35] [[普遍選択子]]に相当するものは、最初期に仕様に含まれていました (>>34)。当時はまだ名前がついていませんでした。

[36] しかしその後 draft5 まで含まれていたものの、 draft6 では削除されています。

** CSS2

[REFS[
- [33] [CITE@en[Selectors]] ([TIME[2001-01-16 00:22:58 +09:00]] 版) <http://www.w3.org/TR/1998/WD-css2-19980128/selector.html#universal-selector>
- [27] [CITE@en[Selectors]] ([TIME[2011-06-07 22:09:52 +09:00]] 版) <http://www.w3.org/TR/CSS2/selector.html#universal-selector>
]REFS]

[29] [[普遍選択子]]は [[CSS2]] で導入されました。 >>33 が初出でした。

** 選択子3

[REFS[
- [30] [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>
- [32] [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#typenmsp>
]REFS]

[31] [[普遍選択子]]に[[名前空間接頭辞]]をつけて[[名前空間]]に対応させることが >>30 
で提案され、 >>32 以後の[[選択子]]仕様に取り込まれています。

[39] 当初は[[大文字]]と[[小文字]]を区別しないことになっていましたが、最終的には区別することとなりました。

** WebVTT (2010)

[42] [[WebVTT]] 仕様書は[[普遍選択子]]が[[WebVTT]]に対して適用される場合の解釈を規定しました。

* 関連

[17] [CODE(CSS)[[[*]]]] 以外の[[局所名]]を指定したものは[[型選択子]]と呼ばれます。

[24] [[普遍選択子]]は[[要素]]に関するものですが、[[属性選択子]]には[[普遍選択子]]に相当するものはありません。

[38] [[単純選択子列]]には暗黙の[[普遍選択子]]が存在することがありますが、 [CODE(CSS)@en[[[:lang()]]]]
の[[引数]]は[[単純選択子]]であって[[単純選択子列]]では無いため、暗黙の[[普遍選択子]]が存在することはありません。

* メモ

[1]
[CITE@ja[ブラウザのデフォルトスタイルをリセットする手段、ユニバーサルセレクタとタイプセレクタの違いは? | Blog hamashun.com]] ([TIME[2007-09-07 18:09:49 +09:00]] 版) <http://www.hamashun.com/blog/2007/09/post_34.html>

[25] [CITE@ja[*{ margin : 0 }はもう古い!? | Emotional Web]] ([CODE[2007-02-22 08:52:20 +09:00]] 版) <http://www.lllcolor.com/archives/200702/margin0.html>
([[名無しさん]] [WEAK[2007-02-22 00:55:28 +00:00]])

[26] 逆になんで全部指定する必要があるのか? ということだ。 UAスタイル・シートの意味は? ''カスケーディング''・スタイル・シートの意味は?


[43] [CITE@en-US[csswg: changeset 14348:ee85b0656afd]]
( ([TIME[2014-08-13 12:15:12 +09:00]] 版))
<https://dvcs.w3.org/hg/csswg/rev/ee85b0656afd9051618834db58b66422c174c9ae>

[10] [CITE@ja[芸名に句読点が含まれる芸能人の一覧 - Wikipedia]]
([TIME[2016-12-31 17:32:04 +09:00]])
<https://ja.wikipedia.org/wiki/%E8%8A%B8%E5%90%8D%E3%81%AB%E5%8F%A5%E8%AA%AD%E7%82%B9%E3%81%8C%E5%90%AB%E3%81%BE%E3%82%8C%E3%82%8B%E8%8A%B8%E8%83%BD%E4%BA%BA%E3%81%AE%E4%B8%80%E8%A6%A7>

[11] [CITE@en[Allow universal selector with no namespace]]
([[SelenIT]]著, [TIME[2017-01-19 23:16:38 +09:00]])
<https://github.com/w3c/csswg-drafts/commit/71dca47365c5ffe5d3bee2444c96810855c6a903>

[FIG(quote)[
[FIGCAPTION[
[28] [CITE@ja[インド・ヨーロッパ祖語 - Wikipedia]]
([TIME[2018-04-01 22:26:40 +09:00]])
<https://ja.wikipedia.org/wiki/%E3%82%A4%E3%83%B3%E3%83%89%E3%83%BB%E3%83%A8%E3%83%BC%E3%83%AD%E3%83%83%E3%83%91%E7%A5%96%E8%AA%9E>
]FIGCAPTION]

> 印欧祖語の単語には、それが再建された形であることを示すために「*」(アステリスク)が付される。

]FIG]


[FIG(quote)[
[FIGCAPTION[
[44] [CITE@ja[祖語 - Wikipedia]]
([TIME[2018-03-27 19:32:00 +09:00]])
<https://ja.wikipedia.org/wiki/%E7%A5%96%E8%AA%9E>
]FIGCAPTION]

> 研究の過程で、ある単語が現存する文献や口頭調査で採取されたものでなく、比較言語学から推定された場合、"*"印を付けて、例えば"*kʷʰ"などと書く。これを推定形と呼ぶ。

]FIG]
