例:
@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"
它,则它不适用于任何东西,因为浏览器无法理解此类名称空间。
本质上,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>
and</a>
标签不在其中。有关详细信息,请参见标签名称为“ svg”的开始标签,树结构调度程序和解析外部内容中的令牌的规则。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句