2016-08-04 109 views
1

我通過學習Mozilla的Firefox代碼來進一步理解CSS。爲什麼指定html名稱空間?

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

你到底是什麼意思的「無處不在」? – BoltClock

回答

4

通過指定html名稱空間保護了哪些其他名稱空間?

如果詢問browser.css中的默認名稱空間是什麼,那就是XUL命名空間。你可以找到命名空間聲明,你通常會期望他們 - 靠近樣式的頂部:

@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"); 

由於默認命名空間是XUL,而不是HTML,所有類型選擇匹配的HTML元素必須包含html|空間前綴否則他們會嘗試匹配默認名稱空間中的元素。

如果需要指定命名空間,爲什麼在CSS代碼中無處不指定?

如果你問爲什麼沒有搞什麼[selected]屬性選擇指定的年代,這是因爲該屬性(與其他一些人一起)是默認的命名空間的一部分, HTML命名空間。

如果你問爲什麼沒有搞什麼.ac-tags-text類選擇指定的年代,記得沒有一個明確的類型選擇或通用選擇該化合物選擇都伴隨着一個隱含*。從以前的問題之一回想一下,

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

,當指定了默認命名空間,只有在默認命名空間任何類型*匹配的元素。這可以防止缺省名稱空間外的元素(如HTML和SVG元素)與選擇器匹配,即使它們恰好具有相同的類名稱。

相關問題