Ursprung von Style Sheets

Style Sheets können einen dieser drei Ursprünge haben: Autor, Leser (User) oder Browser.

Deklarationen aus diesen drei Quellen können gleiche Elemente betreffen. Welche der konkurrierenden Deklarationen angewendet werden, hängt davon ab, welches Gewicht einer Deklaration beigemessen wird. Der Ursprung der Style Sheets beeinflusst die Gewichtung in der Weise, dass den Regeln des Autors das höchste Gewicht zukommt, danach folgen die des Lesers vor den Einstellungen des Browsers.

!important Deklarationen

Das Gewicht einzelner Deklarationen kann mit dem Schlüsselwort "!important" (engl.: wichtig) erhöht werden. Eine Style Deklaration des Lesers mit "!important" z.B. überschreibt eine einfache Deklaration des Autors. Geben jedoch sowohl Autor als auch Leser eine Deklaration mit "!important" an, hat wiederum die Style Deklaration des Autors Vorrang.

Importierte Style Sheets

Mittels der @import Regel können Style Sheets aus externen Dateien in das aktuelle Style Sheet eingebunden werden. Bei importierten Style Sheets ist bezüglich der Ermittlung der maßgeblichen Deklaration Folgendes zu beachten:

Einordnung von sonstigen Formatierungsanweisungen

Ein Browser kann andere, nicht von Style Sheets herrührende Formatierungsanweisungen berücksichtigen. In HTML z.B. könnten die Elemente FONT oder CENTER aber auch Attribute wie align oder bgcolor eine solche Rolle innehaben. In solchen Fällen muss der Browser diese Anweisungen in die entsprechenden Style Regeln übersetzen und diesen die Spezifizität 0 (s.u.) zuweisen. Die Regeln sollen außerdem so behandelt werden, als ob sie am Anfang des Style Sheet des Autors stehen.

Berechnung der Spezifizität eines Selektors

Wie bereits erwähnt, kann der Fall eintreten, dass mehrere Style Regeln auf ein und dasselbe Element des Dokuments anwendbar sein können. Dazu ein einfaches Beispiel: Angenommen ein HTML Dokument enthalte die Zeile
  <H1 id="ueb1">Überschrift</H1>
und das dazu gehörende Style Sheet die Regeln
  H1 {color: red}
  #ueb1 {color: green}
Beide Regeln sind im Prinzip anwendbar, die erste weil sie für alle H1 Elemente gilt, die zweite weil der ID - Selektor zu diesem Element passt. Da ein Browser aber nun einmal den Text eines Elements nicht gleichzeitig in grüner und roter Farbe ausgeben kann, muss eine Entscheidung zugunsten einer Regel getroffen werden. Der Konflikt wird dadurch gelöst, dass die Regel zur Anwendung kommt, welche den spezielleren Selektor enthält. In dem vorliegenden Fall ist das die Regel mit dem ID Selektor, also die zweite Regel. Eine ID darf innerhalb eines Dokuments nur einmal vergeben werden, während beliebig viele H1 Elemente erlaubt sind. Der ID - Selektor ist deshalb der speziellere.
Konflikte dieser Art werden systematisch dadurch gelöst, dass jedem Selektor eine sog. Spezifizität zugeordnet wird. Je genauer ein Selektor das zu formatierende Element beschreibt, umso höher ist seine Spezifizität. Zur Bestimmung der Spezifizität wird folgendes Verfahren angewendet: Der Multiplikator der Kategorie a wird mit dem größten Gewichtungsfaktor multipliziert, der Multiplikator der Kategorie b mit dem zweitgrößten und der Multiplikator der Kategorie c mit dem kleinsten. Die Gewichtungsfaktoren müssen so gewählt werden, dass das maximale Gewicht einer Kategorie kleiner als das geringste Gewicht der nächst höheren Kategorie ist. Die Spezifität eines Selektors ergibt sich aus der Summe der so ermittelten Gewichte. Formal ausgedrückt:

S = a * fa+ b * fb+ c * fc   mit   fb > cmax * fc   und  fa > (bmax * fb + cmax * fc)

Folgende Beispiele sollen den Sachverhalt verdeutlichen (fc=1, cmax=9, fb=10, bmax=9, fa=100):
Selektoren a * 100 b * 10 c * 1 Spezifität
* 0 0 0 0
EM 0 0 1 1
DIV + UL 0 0 2 2
.cl1 0 10 0 10
DIV P.cl2 0 10 2 12
DIV OL A.cl3 0 10 3 13
DIV OL A.cl3:first-child 0 20 3 23
#ab1 100 0 0 100

In HTML Dokumenten können Style Sheet Eigenschaften auch inline, also mittels des Attributs style vergeben werden. Solche Angaben werden als Style Regeln mit ID - Selektor betrachtet, die hinter allen nicht inline Style Regeln stehen.

Verfahren zur Bestimmung der maßgeblichen Deklaration (Kaskadierungsordnung)

Die für ein Element maßgeblichen Deklarationen wird nach folgendem mehrstufigen Auswahlverfahren ermittelt:
  1. Alle für das vorliegende Ausgabemedium geltenden Regeln, deren Selektoren zu dem Element passen, werden zusammengestellt. Aus der Menge dieser Regeln werden alle anwendbaren Deklarationen ausgewählt.
  2. Die Deklarationen werden nach Gewicht und Ursprung ausgesucht: Mit "!important" spezifizierte Deklarationen überschreiben normale Deklarationen. Normale Deklarationen des Autors überschreiben die (normalen) des Users, welche wiederum Vorrang vor den Standarddeklarationen haben. "!important" Deklarationen des Users haben Vorrang vor denen des Autors, welche selbst die Deklarationen des Browsers überschreiben.
  3. Bei der Auswahl der weiterhin in Frage kommenden Deklarationen wird die Spezifizität der zugehörigen Selektoren ausgewertet.
  4. Schließlich entscheidet die Reihenfolge der Deklarationen: Wenn zwei Deklarationen das gleiche Gewicht, den gleichen Ursprung und die gleiche Spezifizität haben, kommt die zuletzt notierte Deklaration zur Anwendung. Importierte Deklarationen werden als den übrigen vorangestellt betrachtet.