@namespace

@namespace est une règle @ qui définit les espaces de noms XML utilisés dans une feuille de style CSS. Les espaces de noms définis sont alors utilisés pour restreindre les sélecteurs universels, de type, et d'attribut afin que ceux-ci ne sélectionnent que les éléments contenus dans cet espace de nom. La règle @namespace est généralement utilisée lorsqu'on manipule des documents entremêlant différents espaces de noms (par exemple, un document HTML5 qui contient du SVG en ligne ou du MathML ou alors un fichier XML qui est composé de plusieurs vocabulaires).

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

/* Cela correspond à tous les éléments XHTML <a>
  car XHTML est l'espace de nom par défaut, sans
  préfixe. */
a {
}

/* Cela correspond à tous les éléments SVG <a> */
svg|a {
}

/* Cela correspond aux éléments <a> XHTML et SVG */
*|a {
}

Les règles @namespace doivent suivre les règles @ @charset et @import et précéder les autres règles @ ainsi que les déclarations de style contenus dans la feuille de style.

@namespace peut être utilisée afin de définir l'espace de noms par défaut de la feuille de style. Lorsqu'un espace de noms par défaut est définit, les sélecteurs universels et les sélecteurs de types (pas les sélecteurs d'attribut, cf. note ci-après) ne s'appliqueront qu'aux éléments de cet espace de noms.

La règle @namespace peut également être utilisée afin de définir un préfixe d'espace de noms. Lorsqu'un sélecteur universel, de type ou d'attribut est préfixé avec le préfixe de l'espace de noms, ce sélecteur ne ciblera les éléments que si l'espace de nom et le nom ou l'attribut de l'élément correspond.

En HTML5, les éléments étrangers connus seront automatiquement affectés à des espaces de noms. Cela signifie que les éléments HTML se comporteront comme s'ils appartenaient à l'espace de noms XHTML (http://www.w3.org/1999/xhtml) même s'il n'y a aucun attribut xmlns dans le document. Les éléments <svg> et <math> seront affectés à leurs espaces de noms respectifs (http://www.w3.org/2000/svg et http://www.w3.org/1998/Math/MathML).

Note : En XML, sauf si un préfixe est directement apposé sur l'attribut (ex. xlink:href), cet attribut n'est rattaché à aucun espace de noms. Autrement dit, les attributs n'héritent pas de l'espace de noms de l'élément auquel ils sont rattachés. Afin de respecter ce comportement, l'espace de noms par défaut n'est pas appliqué aux sélecteurs d'attributs.

Syntaxe

css
/* Espace de noms par défaut */
@namespace url(XML-namespace-URL);
@namespace "XML-namespace-URL";

/* Espace de noms préfixé */
@namespace préfixe url(XML-namespace-URL);
@namespace préfixe "XML-namespace-URL";

Syntaxe formelle

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

<namespace-prefix> =
<ident> (en-US)

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

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

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

Spécifications

Specification
CSS Namespaces Module Level 3
# declaration

Compatibilité des navigateurs

BCD tables only load in the browser