

“@namespace”ルール
“@namespace”ルールはスタイルシートで使用される名前空間の接頭辞を定義し、名前空間に関連付けます。
“@namespace”ルールで定義した名前空間の接頭辞はタイプ・セレクタや属性セレクタで選択する要素や属性を名前空間で絞り込むために使用することができます。
“@namespace”ルールは“@charset”ルールと“@import”ルールよりも後で、それ以外の有効な@ルールとスタイル規則よりも前に配置されなければなりません。
文法的に無効な“@namespace”ルールを含むスタイルシートは無効なスタイルシートとして判断され、無視されます。
“@namespace”ルールの構文
“@namespace”ルールは“@namespace”に続く、ホワイトスペース(半角スペース(“ ”)、タブ文字など)で区切った名前空間の接頭辞と名前空間の名前からなります。
@namespace 〚名前空間の接頭辞〛 〚名前空間の名前〛;
名前空間の接頭辞は有効なCSS識別子として記述します。定義された名前空間の接頭辞はタイプ・セレクタと全称セレクタ、属性セレクタに付加することができ、接頭辞が付加されたセレクタはその名前空間に属する要素や属性のみを選択します。接頭辞は大文字と小文字が区別されます。
名前空間の名前は名前空間のURIである“<url>”値、もしくは“<string>”値として記述します。
名前空間の名前が空文字列である場合は属する名前空間がないことを表します。
@namespace 〚名前空間の接頭辞〛 "";
接頭辞が省略された“@namespace”ルールは既定の名前空間を定義します。名前空間の接頭辞がないセレクタは既定の名前空間に属する要素や属性を選択します。
@namespace 〚名前空間の名前〛;
同じ接頭辞に関連付けられた名前空間が複数ある場合や、既定の名前空間が複数定義されている場合は一番最後に配置された“@namespace”ルールのものが使用されます。
“@namespace”ルールが定義した名前空間の接頭辞はスタイルシートの適用先の文書内での接頭辞の定義とは独立したものになり、スタイルシートの中でだけ有効です。
“@namespace”ルールによる定義は“@namespace”ルールが配置されたスタイルシート内でのみ有効で、“@import”ルールにより読み込まれるスタイルシートや同じ文書に読み込まれる他のスタイルシートには反映されません。
使用例
@namespace url(http://www.w3.org/1999/xhtml); /* HTML名前空間 */
@namespace svg url(http://www.w3.org/2000/svg); /* SVG名前空間 */
@namespace mathml url(http://www.w3.org/2000/svg); /* MathML名前空間 */
a {
/* 既定の名前空間(HTML)の“a”要素に適用されるスタイル */
...
}
svg|a {
/* SVG名前空間の“a”要素に適用されるスタイル */
...
}
svg|* {
/* SVG名前空間のすべての要素に適用されるスタイル */
...
}
|* {
/* 名前空間に属さないすべての要素に適用されるスタイル */
...
}