@namespace

@namespace 是一个 at-rule,用于在 CSS 样式表 中定义 XML 命名空间

试一试

语法

css
/* Default namespace */
@namespace url(XML-namespace-URL);
@namespace "XML-namespace-URL";

/* Prefixed namespace */
@namespace prefix url(XML-namespace-URL);
@namespace prefix "XML-namespace-URL";

描述

定义的命名空间可以用来限制 通用类型属性 选择器,使其只选择该命名空间内的元素。@namespace 规则通常只在处理包含多个命名空间的文档时有用,例如包含内联 SVG 或 MathML 的 HTML,或者混合了多个词汇表的 XML。

任何 @namespace 规则都必须遵循所有 @charset@import 规则,并且必须在样式表中所有其他 at-rule 和 样式声明 之前。

@namespace 可以用来定义样式表的默认命名空间。当定义了默认命名空间时,所有通用和类型选择器(但不包括属性选择器,见下文)只适用于该命名空间内的元素。

@namespace 规则还可以用来定义命名空间前缀。当通用、类型或属性选择器以命名空间前缀为前缀时,则该选择器只有在元素或属性的命名空间名称匹配时才会匹配。

在 HTML 中,已知的 外部元素 将自动分配命名空间。这意味着 HTML 元素将表现得像它们在 XHTML 命名空间(http://www.w3.org/1999/xhtml)中一样,即使文档中没有任何 xmlns 属性,并且 <svg><math> 元素将分配它们各自的命名空间(分别为 http://www.w3.org/2000/svghttp://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);

/* This matches all XHTML <a> elements, as XHTML is the default unprefixed namespace */
a {
}

/* This matches all SVG <a> elements */
svg|a {
}

/* This matches both XHTML and SVG <a> elements */
*|a {
}

规范

规范
CSS Namespaces Module Level 3
# 声明

浏览器兼容性

BCD 表格仅在启用 JavaScript 的浏览器中加载。

另请参阅