【发布时间】:2011-04-06 05:56:25
【问题描述】:
我刚刚看到这个:*|*:link 与 Firebug。这似乎是 Firefox 附加的一些默认样式,但 *|* 是什么意思?
【问题讨论】:
-
CSS 命名空间。除了ajaxian.com/archives/…,我不能再有知识了
标签: firefox css css-selectors
我刚刚看到这个:*|*:link 与 Firebug。这似乎是 Firefox 附加的一些默认样式,但 *|* 是什么意思?
【问题讨论】:
标签: firefox css css-selectors
意思是“所有命名空间中所有:link的元素。”
【讨论】:
*|* 是一个namespace-qualified universal selector。第一个* 表示任何命名空间(包括默认命名空间和缺少命名空间),第二个* 表示任何元素类型。
如前所述,选择器 *|*:link 表示任何命名空间中的任何元素,该元素是未访问的超链接 (:link)。需要明确的是,*| 前缀表示任何命名空间中的某些元素,包括:
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。
【讨论】: