CSS/Namensraum

Aus SELFHTML-Wiki
< CSS
Wechseln zu: Navigation, Suche
Ein Namensraum ist, einfach umschrieben, ein eindeutig identifizierbares Verzeichnis, das alle Elemente einer Sprache umfasst. Mit Hilfe von Namensräumen können innerhalb eines XML-Dokument mehrere XML-Anwendungen (d.h. Sprachen wie XHTML und SVG) voneinander unterschieden und so gleichzeitig verwendet werden. Ein Beispiel: In XHTML und SVG gibt es ein Element mit dem Namen font. Anhand der unterschiedlichen Namensräume kann der Browser erkennen, wie das Element verarbeitet werden muss.

Auch in HTML ab Version 5 werden Namensräume verwendet um das Einbinden von SVG- und MathML-Abschnitten zu ermöglichen. HTML-Elemente befinden sich im XHTML-Namensraum.

Ein Stylesheet kann von sich aus zunächst nicht zwischen Namensräumen unterscheiden. Das bedeutet z.B., dass Selektoren ein Element nur anhand seines Namens ansprechen, ohne den Namensraum des Elements zu berücksichtigen.

Soll ein Stylesheet zwischen verschiedenen Sprachen innerhalb eines Dokuments unterscheiden können, muss definiert werden, welche Namensräume angesprochen werden sollen. Dies geschieht mit der @-Regel @namespace.

[Bearbeiten] Namensräume definieren

@namespace-Regeln müssen nach der @charset- und allen @import-Regeln, aber vor allen anderen @-Regeln und Regelsätzen notiert werden.

  • Chrome
  • Firefox
  • IE 9
  • Opera
  • Safari
  • CSS 3.0

Der Geltungsbereich dieser Regel ist auf das Stylesheet begrenzt, in dem sie definiert wird. Das bedeutet, dass ein Stylesheet, welches ein Stylesheet mit einer @namespace-Regel einbindet oder von einem solchen eingebunden wird, nicht selbst von der Regel beeinflusst wird.

Es gibt zwei Varianten, Namensräume zu definieren: Als Standard-Namensraum, der für alle im Stylesheet enthaltenen Selektoren gilt oder als Potential-Namensraum, der nur für besonders gekennzeichnete Selektoren gilt. beide Varianten können alleinstehend oder gemeinsam verwendet werden.

[Bearbeiten] Standard-Namensraum für ein Stylesheet festlegen

Sollen die Selektoren in einem Stylesheet nur die Elemente ansprechen, die einem bestimmten Namensraum angehören, so kann dazu ein Standard-Namensraum festgelegt werden.

In diesem Fall folgt der einleitenden Anweisung @namespace ein Leerzeichen sowie der Namensraum-Name als Zeichenkette oder als Parameter der url-Funktion. Beendet wird die Regel durch einen Strichpunkt.

Die leere Zeichenkette ("") repräsentiert den Null-Namensraum. Dieser spezielle Namensraum umfasst alle XML-Elemente, die keinem Namensraum zugeordnet wurden.

Beispiel
@namespace 'beispiel:eins';
beispiel { color: blue; }
absatz { color: green; }
<beispiel>
 <beispiel xmlns="beispiel:eins">
  <absatz>Erster Absatz.</absatz>
  <absatz xmlns="beispiel:zwei">Zweiter Absatz.</absatz>
 </beispiel>
 <absatz>Dritter Absatz.</absatz>
 <absatz xmlns="beispiel:eins">Vierter Absatz.</absatz>
 <absatz xmlns="beispiel:zwei">Fünfter Absatz.</absatz>
</beispiel>
Dieses Beispiel zeigt das Wirken eines Stylesheets mit Standard-Namensraum auf ein XML-Dokument.

Das erste und das vierte absatz-Element werden in grüner Schriftfarbe dargestellt, da beide Elemente dem Namensraum „beispiel:eins“ angehören.

Die übrigen absatz-Elemente übernehmen die Schriftfarbe ihres Elternelements (auch wenn dieses einem anderen Namensraum angehört), da sie selbst keinem Namensraum angehören bzw. für ihren Namensraum kein Format festgelegt wurde. Dadurch wird das zweite Element in blauer Schriftfarbe dargestellt; das dritte und fünfte üblicherweise in schwarzer Schriftfarbe.
Beachten Sie: Bei aufeinanderfolgenden Definitionen eines Standard-Namensraums gilt nur die zuletzt notierte Regel.

[Bearbeiten] Potential-Namensraum für Selektoren festlegen

Unabhängig davon, ob ein Standard-Namensraum festgelegt wurde, kann es erforderlich sein, nur einzelne Selektoren auf Elemente eines bestimmten Namensraums anzuwenden. Dies wird durch den Einsatz von Potential-Namensräumen ermöglicht.

Zur Definition eines potentiellen Namensraums wird nach @namespace und einem Leerzeichen ein Schlüsselwort als Kurzname festgelegt, auf dieses folgt wiederum der Namensraum-Name als Zeichenkette oder als Parameter der url-Funktion. Beendet wird die Regel durch einen Strichpunkt.

Damit ein Selektor nur Elemente anspricht, die dem festgelegten Namensraum angehören, wird der Kurzname als Bestandteil des Selektors notiert. Dadurch wird sichergestellt, dass diese Selektoren ignoriert werden, sollte der Browser das CSS-Namensraum-Modul nicht unterstützen oder der notierte Kurzname nicht definiert sein.

Beispiel
@namespace zwei 'beispiel:zwei';
beispiel { color: blue; }
zwei|absatz { color: green; }
<beispiel xmlns="beispiel:eins" xmlns:zwo="beispiel:zwei">
 <absatz>Erster Absatz.</absatz>
 <zwo:absatz>Zweiter Absatz.</zwo:absatz>
 <absatz xmlns="beispiel:zwei">Dritter Absatz.</absatz>
</beispiel>
In diesem Beispiel wurde ein Potential-Namensraum festgelegt und dem Kurznamen „zwei“ zugewiesen. Ein Selektor, der diesen Namensraum beachten soll, erhält als Bestandteil das zuvor festgelegte Schlüsselwort.

Unabhängig vom Namensraum wird das beispiel- und das erste absatz-Element in blauer Schriftfarbe formatiert. Der Selektor „beispiel“ gilt, da kein Standard-Namensraum festgelegt wurde, für alle Elemente gleichermaßen.

Das Element zwo:absatz sowie das dritte absatz-Element werden in grüner Schriftfarbe dargestellt, da beide dem Namensraum „beispiel:zwei“ angehören.
Beachten Sie: Der festgelegte Kurzname kann nur innerhalb des Stylesheets verwendet werden. Es handelt sich dabei um ein Konzept, dass von den in XML bekannten Präfixen unabhängig arbeitet. Verinnerlichen Sie dies, indem Sie sich merken, dass Namensräume anhand ihres Namens (die oft Internet-Adressen ähneln) identifiziert werden, nicht anhand von Kurzschreibweisen.

[Bearbeiten] Selektoren mit Namensraumangabe

Typ- und Universalselektoren können eine Namensraumangabe enthalten. Dazu wird dem Selektor ein vertikaler Strich („|“) vorangestellt. Noch vor diesem Strich kann ein über @namespace definierter Kurzname, ein Sternchen („*“) oder auch nichts weiter notiert werden. Die Bedeutung der einzelnen Selektoren wird nachfolgend erklärt.

Zum besseren Verständnis soll für die nachfolgenden Beispiele dieser Potential-Namensraum gelten:

@namespace ns 'http://www.example.org/';

[Bearbeiten] Typselektor mit Namensraumangabe

Selektor Beschreibung
ns|E Spricht alle E-Elemente an, die dem Namensraum „http://www.example.org/“ angehören.
*|E Spricht alle E-Elemente an, unabhängig davon, ob sie einem Namensraum angehören oder nicht.
|E Spricht alle E-Elemente an, die keinem Namensraum angehören.
E Für diesen Selektor gelten die selben Regeln wie für *|E. Wurde ein Standard-Namensraum definiert, gilt dieser Selektor nur für alle E-Elemente in diesem Namensraum.

[Bearbeiten] Universalselektor mit Namensraumangabe

Selektor Beschreibung
ns|* Spricht alle Elemente an, die dem Namensraum „http://www.example.org/“ angehören.
*|* Spricht alle Elemente an, unabhängig davon, ob sie einem Namensraum angehören oder nicht.
|* Spricht alle Elemente an, die keinem Namensraum angehören.
* Für diesen Selektor gelten die selben Regeln wie für *|*. Wurde ein Standard-Namensraum definiert, gilt dieser Selektor nur für alle Elemente in diesem Namensraum.

[Bearbeiten] Attributselektor mit Namensraumangabe

Auch Attributselektoren können mit Namensraumangabe notiert werden. Gemäß XML und HTML gehören Attribute in der Regel keinem Namensraum an. Durch das Nutzen von Namensraum-Präfixen in XML oder durch die Verwendung namensraumspezifischer DOM-Methoden kann es dennoch vorkommen, dass Attribute mit einem Namensraum verknüpft sind.

Zur Erinnerung: Wird ein Attributselektor ohne Typselektor notiert (also [attr] anstatt z.B. E[attr]), so handelt es sich um eine Kurzschreibweise für *[attr]. Das bedeutet, dass Attributselektoren üblicherweise den Namensraum von Elementen ignorieren (*|*[attr]).

Wird jedoch ein Standard-Namensraum deklariert, so wirken Attributselektoren nur, wenn das Element diesem Namensraum angehört. Diese Einschränkung kann aber durch das Notieren von Typ- oder Universalselektor mit Namensraumangabe wieder aufgehoben werden.

Soll der Namensraum des Attributs berücksichtigt werden, wird der vertikale Strich vor dem Attributnamen, innerhalb der eckigen Klammer notiert.

Selektor Normale Bedeutung Bedeutung bei Deklaration eines Standard-Namensraums
[ns|attr] Entspricht *|*[ns|attr]. Ein Element wird angesprochen, wenn sich das attr-Attribut im Namensraum „http://www.example.org/“ befindet. Der Namensraum des Elements spielt dabei keine Rolle. Ein Element wird angesprochen, wenn es sich im Standard-Namensraum befindet und ein attr-Attribut besitzt, das sich im Namensraum „http://www.example.org/“ befindet.
[*|attr] Entspricht *|*[*|attr]. Ein Element wird angesprochen, wenn es ein attr-Attribut besitzt. Namensraum von Element und Attribut sind dabei bedeutungslos. Ein Element wird angesprochen, wenn es ein attr-Attribut besitzt. Der Namensraum des Attributs spielt dabei keine Rolle.
[|attr] Entspricht *|*[|attr]. Ein Element wird angesprochen, wenn es ein attr-Attribut besitzt und dieses keinem Namensraum angehört. Ein Element wird angesprochen, wenn es sich im Standard-Namensraum befindet und ein attr-Attribut besitzt, das keinem Namensraum angehört.
[attr] Dieser Selektor verhält sich identisch zu [|attr].

[Bearbeiten] Weitere Selektoren mit Namensraumangabe

Wie bei Attributselektoren handelt es sich bei ID- und Klassenselektoren sowie Pseudoklassen und -elementen um Kurzschreibweisen, bei denen ein gedachter Universalselektor an erster Stelle steht (sofern die Selektoren nicht auf einen Elementtyp eingeschränkt wurden).

Beispiel
#id /* steht für */ *#id
.klasse /* steht für */ *.klasse
:only-child /* steht für */ *:only-child
::first-line /* steht für */ *:first-line

Normalerweise sprechen diese Selektoren jedes Element an, unabhängig von dessen Namensraum (z.B. *|*#id, *|*:first-child).

Durch das Festlegen eines Standard-Namensraums werden die Selektoren, wie oben notiert, nur Elemente ansprechen, die dem Standardnamensraum angehören. Das Notieren eines Typ- oder Universalselektors mit Namensraumangabe kann diese Einschränkung für einen Selektor wieder aufheben.

Beispiel
  • *|*#id
    spricht unabhängig vom Namensraum das Element mit der ID „id“ an.
  • ns|*.klasse
    spricht alle Elemente im Namensraum „http://www.example.org/“ mit der Klasse „klasse“ an.
  • |element:nth-child(even)
    spricht jedes zweite element-Kindelement an, sofern es keinem Namensraum angehört.
Meine Werkzeuge
Namensräume

Varianten
Aktionen
Übersicht
Index
Mitmachen
Werkzeuge
Spenden
SELFHTML