【发布时间】:2016-05-01 10:53:15
【问题描述】:
在 CSS 中,* 将匹配任何元素。
经常使用*|* 代替* 来匹配所有元素。这通常用于测试目的。
* 和 *|* 在 CSS 中的区别是什么?
【问题讨论】:
标签: css css-selectors namespaces
在 CSS 中,* 将匹配任何元素。
经常使用*|* 代替* 来匹配所有元素。这通常用于测试目的。
* 和 *|* 在 CSS 中的区别是什么?
【问题讨论】:
标签: css css-selectors namespaces
通用选择器允许一个可选的命名空间组件。用法如下:
ns|*
命名空间 ns 中的所有元素
*|*
所有元素
|*
所有没有命名空间的元素
*
如果没有指定默认命名空间,这相当于 *|*。否则,它等效于 ns|*,其中 ns 是默认命名空间。
所以,* 和 *|* 并不总是相同的。如果提供了默认名称空间,则 * 仅选择属于该名称空间的元素。
您可以使用以下两个 sn-ps 直观地看到差异。首先,定义了默认命名空间,因此* 选择器仅将米色背景应用于作为该名称空间一部分的元素,而*|* 将边框应用于所有元素。
@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>
在下面的 sn-p 中没有定义默认命名空间,因此 * 和 *|* 都适用于所有元素,因此它们都具有米色背景和黑色边框。换句话说,当没有指定默认命名空间时,它们的工作方式相同。
* {
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>
正如 BoltClock 在 cmets (1,2) 中指出的那样,最初命名空间仅适用于基于 XML 的语言,例如 XHTML、SVG 等,但根据最新规范,所有 HTML 元素(即 HTML 中的元素命名空间)被命名为http://www.w3.org/1999/xhtml。 Firefox 遵循这种行为,并且在所有 HTML5 用户代理中都是一致的。您可以在this answer找到更多信息。
【讨论】:
http://www.w3.org/1999/xhtml
在 CSS 中,* 将匹配任何元素。
| 用于匹配选择的特定元素。两者都是用于我们测试目的的选择器
【讨论】: