示例:
@namespace html "http://www.w3.org/1999/xhtml";
@namespace svg "http://www.w3.org/2000/svg";
html|a{
text-decoration: underline;
color: blue;
}
svg|a {
stroke: red;
}
<a href="#">link</a>
<svg>
<a href="#">
<text y="21" x="60">link</text>
</a>
</svg>
如您所见,有2个链接,但是每个链接的规则都不相同,因为浏览器了解我指的是什么空间。那么浏览器如何理解我正在使用的名称空间?因为如果您写@namespace my "http://example.com"
并不适用于任何内容,因为浏览器无法理解此类名称空间。
答案 0 :(得分:1)
本质上,HTML5解析器在处理每个令牌时查看将成为要添加到DOM的下一个元素的父元素的元素。通常,它将每个元素与其父元素放在相同的名称空间中。它开始期望元素位于http://www.w3.org/1999/xhtml
命名空间中,但是当它处理<svg>
开始标记时,它知道<svg>
元素位于http://www.w3.org/2000/svg
命名空间中。因此,svg元素所包含的元素也将放入http://www.w3.org/2000/svg
命名空间中。当处理</svg>
结束标记时,下一个标记的父元素将不是svg元素,因此它将再次期望http://www.w3.org/1999/xhtml
命名空间中的元素。
其他标记也可以导致切换回http://www.w3.org/1999/xhtml
命名空间,但是<a>
和</a>
标记不在其中。有关详细信息,请参见A start tag whose tag name is "svg",the tree construction dispatcher和The rules for parsing tokens in foreign content。