2010-08-31 215 views
46

我刚刚看到这个:*|*:link与Firebug。这似乎是Firefox追加的一些默认样式,但*|*是什么意思?* | *这意味着什么CSS?

+7

CSS名称空间。除了那个http://ajaxian.com/archives/w3c-css-namespaces-now-a-candidate-recommendation我不能评论 – 2010-08-31 12:09:53

回答

14

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

如前所述,选择器*|*:link表示任何名称空间中任何未访问超链接的元素(:link)。需要明确的是,该*|前缀是指在任何命名空间的某些元件,其中包括:在默认名称空间(例如XHTML)在任何其他名称空间

  • 元件(例如XUL在Firefox)
  • 元素

    • 的元素不是在一个命名空间

    CSS has a module dedicated to namespace declarations.

    文档类型决定什么样的元素应该被指定为HYP erlinks:

    • 在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