2010-08-31 239 views
46

我剛剛看到這個:*|*:link與Firebug。這似乎是Firefox追加的一些默認樣式,但*|*是什麼意思?* | *這意味着什麼CSS?

+7

CSS名稱空間。除了那個http://ajaxian.com/archives/w3c-css-namespaces-now-a-candidate-recommendation我不能評論 – 2010-08-31 12:09:53

回答

14

*|*namespace-qualified universal selector。第一個*表示任何名稱空間(包括缺省名稱空間和缺少名稱空間),第二個表示任何元素類型。

如前所述,選擇器*|*:link表示任何名稱空間中任何未訪問超鏈接的元素(:link)。需要明確的是,該*|前綴是指在任何命名空間的某些元件,其中包括:在默認名稱空間(例如XHTML)在任何其他名稱空間

  • 元件(例如XUL在Firefox)
  • 元素

    • 的元素不是在一個命名空間

    CSS has a module dedicated to namespace declarations.

    文檔類型決定什麼樣的元素應該被指定爲HYP erlinks:

    • 在HTML和XHTML,這始終是一個a元件與href屬性。

    • 在XUL中,我相信這是一個label.text-link元素,具有href屬性。

    請注意,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