@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).
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 (https://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 (https://www.w3.org/2000/svg
et https://www.w3.org/1998/Math/MathML
).
Note : En XML, sauf si un préfixe est directement apposé sur l'atribut (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
/* 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-prefix>? [ <string> | <uri> ];où
<namespace-prefix> = IDENT
Exemples
@namespace url(https://www.w3.org/1999/xhtml); @namespace svg url(https://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 {}
Spécifications
Spécification | État | Commentaires |
---|---|---|
CSS Namespaces Module La définition de '@namespace' dans cette spécification. |
Recommendation | Définition initiale. |
Compatibilité des navigateurs
Fonctionnalité | Chrome | Firefox (Gecko) | Internet Explorer | Opera | Safari |
---|---|---|---|---|---|
Support simple | 1.0 | 1.0 (1.7 ou moins) | 9.0 | 8.0 | 1.0 |
Sélecteur d'espace de noms (|) | 1.0 | 1.0 (1.7 ou moins) | 9.0 | 8.0 | 3.0 |
Fonctionnalité | Android | Chrome pour Android | Firefox Mobile (Gecko) | IE Mobile | Opera Mobile | Safari Mobile |
---|---|---|---|---|---|---|
Support simple | ? | ? | ? | ? | ? | ? |