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

Uff*_*ffo 47 css firefox css-selectors css3

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

Fra*_*kie 31

它意味着"所有命名空间中的所有元素都是" :link.

有关通用选择器和命名空间的更多信息.


Bol*_*ock 14

*|*是一个命名空间限定的通用选择器.第一个*意味着任何命名空间(包括默认命名空间和缺少命名空间),第二个*意味着任何元素类型.

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

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

CSS有一个专用于名称空间声明的模块.

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

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

  • 在XUL中,我相信这是一个label.text-link具有href属性的元素.

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

也就是说,浏览器在其用户代理样式表中声明了一个默认命名空间,无论如何都与XHTML for HTML/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);
Run Code Online (Sandbox Code Playgroud)

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

另请注意,如果要使用名称空间前缀来定位任何元素类型,*则右侧必须存在,因此类似的内容*|:link将无效.有关详情,请参阅此答案.