为什么要指定html命名空间?

时间:2016-08-04 09:19:53

标签: css css3 firefox css-selectors xml-namespaces

我通过研究Mozilla的Firefox代码来进一步理解CSS。

browser.css中,代码为:

.ac-tags-text[selected] > html|span.ac-tag {
  background-color: hsl(0, 0%, 100%);
  color: hsl(210, 80%, 40%);
}

html|span.ac-emphasize-text-title,
html|span.ac-emphasize-text-tag,
html|span.ac-emphasize-text-url {
  font-weight: 600;
}

反复使用html|span代替span

通过指定html命名空间来保护其他命名空间?

如果需要指定命名空间,为什么在CSS代码中没有指定它?

1 个答案:

答案 0 :(得分:4)

  

通过指定onBindViewHolder命名空间来保护其他命名空间?

如果您询问browser.css中的默认命名空间是什么,那么它就是XUL命名空间。您可以在通常期望的位置找到名称空间声明 - 靠近样式表的顶部:

html

由于默认命名空间是XUL而不是HTML,所有匹配HTML元素的类型选择器必须包含@namespace url("http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"); @namespace html url("http://www.w3.org/1999/xhtml"); @namespace svg url("http://www.w3.org/2000/svg"); 命名空间前缀,否则它们将尝试匹配默认命名空间中的元素。

  

如果需要指定命名空间,为什么在CSS代码中没有指定它?

如果您问为什么没有为html|属性选择器之类的内容指定它,那是因为该属性(以及许多其他属性)是默认命名空间的一部分,不是 HTML命名空间。

如果你问为什么没有像[selected]类选择器那样指定它,请记住没有显式类型选择器或通用选择器的复合选择器都带有隐式.ac-tags-text。回想一下以前的一个问题,

What is the difference between * and *|* in CSS?

当指定默认命名空间时,*仅在默认命名空间中匹配任何类型的元素。这可以防止默认命名空间之外的元素(如HTML和SVG元素)匹配选择器,即使它们碰巧具有相同的类名。