【问题标题】:What does *|* this mean in CSS?*|* 这在 CSS 中是什么意思?
【发布时间】:2011-04-06 05:56:25
【问题描述】:

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

【问题讨论】:

标签: firefox css css-selectors


【解决方案1】:

意思是“所有命名空间中所有:link的元素。”

More on universal selectors and namespaces.

【讨论】:

    【解决方案2】:

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

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

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

    CSS has a module dedicated to namespace declarations.

    文档类型决定了哪些元素应该被指定为超链接:

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

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

    请注意,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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-02-04
      • 1970-01-01
      • 2019-09-27
      • 2017-11-28
      • 1970-01-01
      • 2012-01-02
      相关资源
      最近更新 更多