在 CSS 中,*将匹配任何元素。
*
经常*|*使用,而不是*匹配所有元素。这通常用于测试目的。
*|*
*CSS和CSS有什么区别*|*?
根据W3C 选择器规范:
通用选择器允许一个可选的命名空间组件。它的用法如下: ns|* 命名空间 ns 中的所有元素 *|* 所有元素 |* 所有没有命名空间的元素 * 如果没有指定默认命名空间,这相当于 |。否则,它等效于 ns|*,其中 ns 是默认命名空间。
通用选择器允许一个可选的命名空间组件。它的用法如下:
ns|* 命名空间 ns 中的所有元素
ns|*
*|* 所有元素
|* 所有没有命名空间的元素
|*
* 如果没有指定默认命名空间,这相当于 |。否则,它等效于 ns|*,其中 ns 是默认命名空间。
所以,不*,*|*并不总是相同的。如果提供了默认名称空间,则*仅选择属于该名称空间的元素。
您可以使用以下两个片段直观地看到差异。首先,定义了默认命名空间,因此*选择器仅将米色背景应用于作为该名称空间一部分的元素,而*|*将边框应用于所有元素。
@namespace "http://www.w3.org/2000/svg"; * { background: beige; } *|* { border: 1px solid; } <a href="#">This is some link</a> <svg xmlns="http://www.w3.org/2000/svg"> <a xlink:href="#"> <text x="20" y="20">This is some link</text> </a> </svg>
在下面的代码片段中,没有定义默认命名空间,因此两者都*适用*|*于所有元素,因此它们都具有米色背景和黑色边框。换句话说,当没有指定默认命名空间时,它们的工作方式相同。
* { background: beige; } *|* { border: 1px solid; } <a href="#">This is some link</a> <svg xmlns="http://www.w3.org/2000/svg"> <a xlink:href="#"> <text x="20" y="20">This is some link</text> </a> </svg>
正如评论中指出的那样,最初命名空间仅适用于基于 XML 的语言,例如 XHTML、SVG 等,但根据最新规范,所有 HTML 元素(即 HTML 命名空间中的元素)都被命名为http://www.w3.org/1999/xhtml. Firefox 遵循这种行为,并且在所有 HTML5 用户代理中都是一致的。
http://www.w3.org/1999/xhtml