@namespace

@namespace es una regla que define XML namespace a ser usados en una hoja de estilos CSS. Los namespaces definidos pueden utilizarse para restringir selectores universales, types, y selectores de atributos para seleccionar sólo elementos dentro de ese namespace.La regla @namespace generalmente sólo es útil cuando se trata de documents que contienen múltiples namespace—como HTML5 con SVG o MathML, o XML que mezclamúltiplesvocabularios.

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

/* Esto coincide con todos los elementos XHTML <a>, ya que el XHTML es el namespace por defecto sin prefijo */
a {
}

/* Esto coincide con todos los elementos SVG <a> */
svg|a {
}

/* Esto concuerda con todos los elementos XHTML y SVG <a> elements */
*|a {
}

Cualquier @namespace debe seguir todas las reglas de @charset y @import, y preceder a todas las demás reglas y declaraciones de estilo de una hoja de estilos.

Se puede utilizar @namespace para definirun namespace por defecto de una hoja de estilos. Cuando se define un namespace por defecto, todos los selectores universales y tipos (pero no los selectores de atributo, véase la nota a continuación) se aplican únicamente a los elementos de ese namespace

La regla @namespace también puede usarse para definir un prefijo de namespace. Cuando un selector universal, tipo, o selector de atributo se antepone a un prefijo de un namespace, ese selector sólo coincide si el namespace y el nombre del elemento o atributo coinciden.

En HTML5, conocidos comoelementos externos automaticamente se les asignarán un namespace. Esto significa que los elementos HTML actuarán como si estuvieran en un namespace XHTML (http://www.w3.org/1999/xhtml), incluso si no hay ningún atributo xmlns en ninguna parte del document, y los elementos <svg> y <math> se les asignará un namespace propio (http://www.w3.org/2000/svg and http://www.w3.org/1998/Math/MathML).

Nota: En XML, a menos que se defina un prefijo directamente sobre un atributo (ejemplo., xlink:href), ese atributo no tiene namespace. En otras palabras, los atributos no heredan el namespace del elemento en el que están. Para que coincida con este comportamiento, el namespace por defecto en CSS no se aplica a los selectores de atributos.

Sintaxis

css
/* Namespace por defecto */
@namespace url(XML-namespace-URL);
@namespace "XML-namespace-URL";

/* Namespace sin prefijo */
@namespace prefix url(XML-namespace-URL);
@namespace prefix "XML-namespace-URL";

Sintaxis oficial

@namespace = 
@namespace <namespace-prefix>? [ <string> (en-US) | <url> ] ;

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

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

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

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

Especificaciones

Specification
CSS Namespaces Module Level 3
# declaration

Compatibilidad con navegadores

BCD tables only load in the browser