Style Sheets können entweder vom Autor, vom Leser bzw. User oder vom Browser stammen. Bei Konflikten, d.h. bei Regeln, die gleiche Elemente betreffen, haben die Regeln des Autors Vorrang vor denen des Users. Jene wiederum überschreiben die Einstellungen des Browsers.
Es besteht die Möglichkeit, das Gewicht von Style Deklarationen mittels des Ausdrucks "!important" zu erhöhen. Eine Style Deklaration des Lesers mit "!important" ü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.
Mittels der @import Regel können Style Sheets aus externen Dateien in das aktuelle Style Sheet eingebunden werden.
Regeln gleichen Ursprungs werden in der umgekehrten Reihenfolge, in der sie definiert wurden gewichtet. Also
haben die zuletzt angegebenen Regeln höheres Gewicht als die vorhergehenden.
Die Reihenfolge, in der @import Anweisungen in Style Sheets auftreten, ist daher nicht ohne Bedeutung.
Auch innerhalb ein und desselben Style Sheet kann der Fall auftreten, dass auf ein Element mehrere Style
Regeln anwendbar sind. Wenn diese Regeln zudem noch Einstellungen der gleichen Eigenschaften enthalten,
muss entschieden werden, welche der Deklarationen gelten sollen. Zu diesem Zweck werden die Selektoren
der Regeln herangezogen. Je genauer ein Selektor ein Element beschreibt, umso höher wird die betreffende
Regel eingestuft. Ein Maß für diese Einstufung ist die sog. Spezifizität. Je detaillierter die Selektoren,
desto höher ihre Spezifizität.
Zur Bestimmung der Spezifität werden die id
Attribute (a), die class Attribute (b) und die Elemente (c) gezählt. Die
Anzahl der Selektoren der Kategorie a werden mit dem größten Faktor gewichtet, die Anzahl
der Selektoren der Kategorie b mit dem zweitgrößten und die der Kategorie c mit dem
kleinsten. Die Faktoren 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
einer Style Deklaration 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 |
DIV | 0 | 0 | 1 | 1 |
DIV P | 0 | 0 | 2 | 2 |
.cl1 | 0 | 10 | 0 | 10 |
DIV P.cl2 | 0 | 10 | 2 | 12 |
DIV P A.cl3 | 0 | 10 | 3 | 13 |
DIV P A.cl3:first-letter | 0 | 10 | 4 | 14 |
#ab1 | 100 | 0 | 0 | 100 |
Pseudoelemente werden wie normale Elemente und Pseudoklassen wie normale Klassen gewichtet.
Bei der Bestimmung des maßgeblichen Eigenschaftswertes wird wie folgt verfahren:
Eine inline Deklaration mit dem Attribut style hat die gleiche Spezifität wie eine mit einem ID - Selektor im Style Block:
<STYLE type="text/css">
#abc { color: green; }
</STYLE>
<DIV id="abc" style="color: red;">
Beide Deklarationen haben das gleiche Gewicht, gemäß Regel 5 überschreibt aber die letzte Deklaration die vorhergehende. Die Textfarbe des DIV Elements ist also rot.