什么* | *这在CSS中意味着什么?

时间:2010-08-31 12:06:06

标签: css firefox css3 css-selectors

我刚看到这个:*|*:link和Firebug。它似乎是Firefox附加的一些默认样式,但*|*是什么意思?

2 个答案:

答案 0 :(得分:31)

这意味着“所有名称空间中的所有元素都是:link。”

More on universal selectors and namespaces.

答案 1 :(得分:14)

*|*namespace-qualified universal selector。第一个*表示任何名称空间(包括默认名称空间和缺少名称空间),第二个*表示任何元素类型。

如上所述,选择器*|*:link表示任何名称空间中任何未访问的超链接(:link)的元素。需要说明的是,*|前缀表示任何名称空间中的某些元素,包括:

  • 默认命名空间中的元素(例如XHTML)
  • 任何其他命名空间中的元素(例如Firefox中的XUL)
  • 不在命名空间中的元素

CSS has a module dedicated to namespace declarations.

文档类型确定应将哪种元素指定为超链接:

  • 在HTML和XHTML中,这始终是具有a属性的href元素。

  • 在XUL中,我认为这是一个label.text-link元素,具有href属性。

请注意,CSS名称空间仅在使用CSS设置XML文档样式或类似定义名称空间的其他文档类型时才有用。这包括具有自定义XML命名空间的XHTML页面。在常规HTML文档中,通常不需要在选择器中使用名称空间前缀。

也就是说,浏览器在其用户代理样式表中声明了一个默认命名空间,无论如何都与HTML / XHTML的XHTML相对应,以允许与其他基于XML的语言的互操作性。对于Firefox,这显然适用于XHTML和XUL:

@namespace url(http://www.w3.org/1999/xhtml); /* set default namespace to HTML */
@namespace xul url(http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul);

由于(X)HTML元素存在于默认命名空间中,因此用于匹配这些元素的选择器不需要以名称空间为前缀。正如我在上面提到的那样,这就是为什么不需要在选择器中使用名称空间前缀的技术原因。

另请注意,如果要使用命名空间前缀定位任何元素类型,则右侧的*必须在那里,因此*|:link之类的内容将无效。有关详细信息,请参阅this answer