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

时间:2021-10-16 13:00:01

I just saw this: *|*:link with Firebug. It seems to be some default styling which Firefox appends, but what does *|* mean?

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

2 个解决方案

#1


31  

It means "all elements in all namespaces that are :link."

它意味着“所有名称空间中的所有元素都是:链接”。

More on universal selectors and namespaces.

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

#2


14  

*|* is a namespace-qualified universal selector. The first * means any namespace (including the default namespace and the lack of a namespace), and the second * means any element type.

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

As mentioned, the selector *|*:link represents any element in any namespace that is an unvisited hyperlink (:link). To be clear, the *| prefix means certain elements in any namespace, including:

如上所述,selector * | *:link表示任何名称空间中任何未访问的超链接(:link)的元素。要清楚,* |前缀表示任何名称空间中的某些元素,包括:

  • Elements in the default namespace (e.g. XHTML)
  • 默认命名空间中的元素(例如XHTML)
  • Elements in any other namespace (e.g. XUL in Firefox)
  • 任何其他命名空间中的元素(例如Firefox中的XUL)
  • Elements that aren't in a namespace
  • 不在命名空间中的元素

CSS has a module dedicated to namespace declarations.

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

The document type determines what kind of elements should be designated as hyperlinks:

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

  • In HTML and XHTML, this is always an a element with a href attribute.

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

  • In XUL, I believe this is a label.text-link element with a href attribute.

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

Note that CSS namespaces are only useful when using CSS to style XML documents, or other document types that define namespaces similarly. This includes XHTML pages with custom XML namespaces. In regular HTML documents there is usually no need to use namespaces prefixes in selectors.

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

That said, browsers declare a default namespace in their user agent stylesheets that corresponds to XHTML for HTML/XHTML anyway, to allow interoperability with other XML-based languages. In the case of Firefox, this is obviously for working with both XHTML and XUL:

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

Since (X)HTML elements live in the default namespace, selectors for matching just these elements don't need to be namespace-prefixed. This is the technical reason why, as I mention above, there's no need to use namespace prefixes in selectors.

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

Note also that if you want to target any element type with a namespace prefix, the * on the right side must be there, so something like *|:link would be invalid. See this answer for details.

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

#1


31  

It means "all elements in all namespaces that are :link."

它意味着“所有名称空间中的所有元素都是:链接”。

More on universal selectors and namespaces.

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

#2


14  

*|* is a namespace-qualified universal selector. The first * means any namespace (including the default namespace and the lack of a namespace), and the second * means any element type.

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

As mentioned, the selector *|*:link represents any element in any namespace that is an unvisited hyperlink (:link). To be clear, the *| prefix means certain elements in any namespace, including:

如上所述,selector * | *:link表示任何名称空间中任何未访问的超链接(:link)的元素。要清楚,* |前缀表示任何名称空间中的某些元素,包括:

  • Elements in the default namespace (e.g. XHTML)
  • 默认命名空间中的元素(例如XHTML)
  • Elements in any other namespace (e.g. XUL in Firefox)
  • 任何其他命名空间中的元素(例如Firefox中的XUL)
  • Elements that aren't in a namespace
  • 不在命名空间中的元素

CSS has a module dedicated to namespace declarations.

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

The document type determines what kind of elements should be designated as hyperlinks:

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

  • In HTML and XHTML, this is always an a element with a href attribute.

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

  • In XUL, I believe this is a label.text-link element with a href attribute.

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

Note that CSS namespaces are only useful when using CSS to style XML documents, or other document types that define namespaces similarly. This includes XHTML pages with custom XML namespaces. In regular HTML documents there is usually no need to use namespaces prefixes in selectors.

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

That said, browsers declare a default namespace in their user agent stylesheets that corresponds to XHTML for HTML/XHTML anyway, to allow interoperability with other XML-based languages. In the case of Firefox, this is obviously for working with both XHTML and XUL:

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

Since (X)HTML elements live in the default namespace, selectors for matching just these elements don't need to be namespace-prefixed. This is the technical reason why, as I mention above, there's no need to use namespace prefixes in selectors.

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

Note also that if you want to target any element type with a namespace prefix, the * on the right side must be there, so something like *|:link would be invalid. See this answer for details.

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