我通过研究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代码中没有指定它?
答案 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元素)匹配选择器,即使它们碰巧具有相同的类名。