2016-08-04 48 views
1

Ich verbessere mein Verständnis von CSS, indem ich Mozillas Code für Firefox studiere.Warum wird ein html-Namespace angegeben?

In browser.css, der Code lautet:

.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; 
} 

Wiederholt html|span verwendet wird, statt nur span.

Welcher andere Namespace wird geschützt, indem der Namespace html angegeben wird?

Wenn der Namespace angegeben wird, warum wird er nicht überall im CSS-Code angegeben?

+0

Was genau meinen Sie mit "überall"? – BoltClock

Antwort

4

Welcher andere Namespace wird geschützt, indem der Namespace html angegeben wird?

Wenn Sie fragen, was der Standard-Namespace in browser.css ist, ist es der XUL-Namespace. Sie können die Namespace-Deklarationen, in denen Sie sie normalerweise erwarten würde - in der Nähe der Spitze des Sheet:

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

Da der Standard-Namespace XUL ist, nicht HTML, alle Typselektoren HTML-Elemente passend zum html| Namespacepräfix enthalten muss, Andernfalls versuchen sie stattdessen, Elemente im Standardnamespace abzugleichen.

Wenn der Namespace angegeben wird, warum wird er nicht überall im CSS-Code angegeben?

Wenn Sie sich fragen, warum es nicht für Dinge wie die [selected] Attributselektor angegeben, dann ist es, weil das Attribut (zusammen mit einer Reihe anderer) Teil des Standard-Namespace, nicht der HTML-Namespace ist.

Wenn Sie fragen, warum es nicht für Dinge wie den .ac-tags-text Klassenselektor angegeben ist, denken Sie daran, dass zusammengesetzte Selektoren ohne einen expliziten Typselektor oder universellen Selektor von einem impliziten * begleitet werden. Erinnern Sie sich an einem Ihrer früheren Fragen,

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

dass, wenn ein Standard-Namespace angegeben wird, * Streichhölzer Elemente jeder Art nur im Standard-Namespace. Dies verhindert, dass Elemente außerhalb des Standardnamespace (wie HTML- und SVG-Elemente) mit dem Selektor übereinstimmen, selbst wenn sie denselben Klassennamen haben.