@namespace

@namespaceアットルールで、 CSS スタイルシート で使用する XML 名前空間を定義します。

試してみましょう

構文

css
/* 既定の名前空間 */
@namespace url(XML-namespace-URL);
@namespace "XML-namespace-URL";

/* 接頭辞つきの名前空間 */
@namespace prefix url(XML-namespace-URL);
@namespace prefix "XML-namespace-URL";

解説

定義された名前空間は、全称属性セレクターにおいて、選択する要素をその名前空間に制限するために使用することができます。 @namespace ルールは一般に、複数の名前空間を含む文書を扱う場合—例えば、HTML5 でインラインの SVG や MathML を併用する場合や、複数の語彙が混在する XML などでのみ役立ちます。

@namespace ルールは、スタイルシート内ですべての @charset および @import ルールより後、また他のアットルールやスタイル宣言より前に配置しなければなりません。

@namespace は、スタイルシートの既定の名前空間が定義できます。既定の名前空間を定義するとすべての全称セレクターや要素型セレクター(属性セレクターは除く。後述のメモを参照)は、既定の名前空間内の要素にのみ適用されます。

また、 @namespace ルールで名前空間の接頭辞が定義できます。全称セレクター、要素型セレクター、属性セレクターに名前空間の接頭辞を付加すると、これらのセレクターは名前空間および要素または属性に一致する場合のみ一致します。

HTML5 では、既知の外来要素へ自動的に名前空間が割り当てられます。すなわち、 HTML 要素は文書内に xmlns 属性が存在しなくても XHTML 名前空間 (http://www.w3.org/1999/xhtml) に含まれているかのように動作します。また <svg> および <math> 要素は、適切な名前空間(http://www.w3.org/2000/svg および http://www.w3.org/1998/Math/MathML)が割り当てられます。

メモ: XML では、属性に直接接頭辞を定義しない限り(: xlink:href)、属性は名前空間を持ちません。言い換えると、属性は所属する要素から名前空間を継承しません。この動作に合わせるため、 CSS の既定の名前空間は属性セレクターに適用しません。

形式文法

@namespace = 
@namespace <namespace-prefix>? [ <string> | <url> ] ;

<namespace-prefix> =
<ident>

<url> =
<url()> |
<src()>

<url()> =
url( <string> <url-modifier>* ) |
<url-token>

<src()> =
src( <string> <url-modifier>* )

既定かつ定義済みの名前空間の指定

css
@namespace url(http://www.w3.org/1999/xhtml);
@namespace svg url(http://www.w3.org/2000/svg);

/* XHTML は既定で接頭辞のない名前空間であるため、これは XHTML のすべての <a> 要素を選択します */
a {
}

/* これはすべての SVG <a> 要素を選択します */
svg|a {
}

/* XHTML と SVG の両方の <a> 要素に一致します */
*|a {
}

仕様書

Specification
CSS Namespaces Module Level 3
# declaration

ブラウザーの互換性

BCD tables only load in the browser

関連情報