小编典典

CSS 中的 * 和 *|* 有什么区别?

all

在 CSS 中,*将匹配任何元素。

经常*|*使用,而不是*匹配所有元素。这通常用于测试目的。

*CSS和CSS有什么区别*|*


阅读 44

收藏
2022-06-21

共1个答案

小编典典

根据W3C 选择器规范

通用选择器允许一个可选的命名空间组件。它的用法如下:

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
用户代理中都是一致的。

2022-06-21