Syntax
Das Hauptziel der Cascading Stylesheet (CSS)-Sprache ist es, einer Browser-Engine zu ermöglichen, Elemente der Seite mit bestimmten Eigenschaften zu gestalten, wie Farben, Positionierung oder Dekorationen. Die CSS-Syntax spiegelt dieses Ziel wider und ihre grundlegenden Bausteine sind:
- Die Eigenschaft, ein Bezeichner, der einen menschenlesbaren Namen darstellt und definiert, welches Merkmal betrachtet wird.
- Der Wert, der beschreibt, wie das Merkmal von der Engine gehandhabt werden muss. Jede Eigenschaft hat eine Menge gültiger Werte, die durch eine formale Grammatik definiert sind, sowie eine semantische Bedeutung, die von der Browser-Engine implementiert wird.
CSS-Deklarationen
Das Setzen von CSS-Eigenschaften auf bestimmte Werte ist die Kernfunktion der CSS-Sprache. Ein Paar aus Eigenschaft und Wert wird als Deklaration bezeichnet, und jede CSS-Engine berechnet, welche Deklarationen auf jedes einzelne Element einer Seite anzuwenden sind, um es angemessen zu gestalten und anzuordnen.
In CSS sind sowohl Eigenschaften als auch Werte standardmäßig nicht case-sensitiv. Das Paar wird durch einen Doppelpunkt, :
(U+003A COLON), getrennt und Leerzeichen vor, zwischen und nach Eigenschaften und Werten, jedoch nicht unbedingt innerhalb, werden ignoriert.
Es gibt Hunderte verschiedener Eigenschaften in CSS und eine praktisch endlose Anzahl unterschiedlicher Werte. Nicht alle Paare von Eigenschaften und Werten sind erlaubt, und jede Eigenschaft definiert, welche Werte gültig sind. Wenn ein Wert für eine bestimmte Eigenschaft nicht gültig ist, wird die Deklaration als ungültig betrachtet und von der CSS-Engine vollständig ignoriert.
CSS-Deklarationsblöcke
Deklarationen werden in Blöcken gruppiert, die von einer öffnenden Klammer, {
(U+007B LEFT CURLY BRACKET), und einer schließenden Klammer, }
(U+007D RIGHT CURLY BRACKET), begrenzt werden. Diese Blöcke können manchmal verschachtelt sein, daher müssen öffnende und schließende Klammern zusammenpassen.
Solche Blöcke werden natürlicherweise als Deklarationsblöcke bezeichnet, und Deklarationen innerhalb dieser werden durch ein Semikolon, ;
(U+003B SEMICOLON), getrennt. Ein Deklarationsblock kann leer sein, d.h. keine Deklaration enthalten. Leerzeichen um Deklarationen herum werden ignoriert. Die letzte Deklaration eines Blocks muss nicht mit einem Semikolon abgeschlossen werden, obwohl es oft als guter Stil angesehen wird, dies zu tun, da es das Vergessen verhindert, es hinzuzufügen, wenn der Block um eine weitere Deklaration erweitert wird.
Ein CSS-Deklarationsblock wird im folgenden Diagramm dargestellt.
Hinweis:
Der Inhalt eines CSS-Deklarationsblocks, d.h. eine Liste von durch Semikolon getrennten Deklarationen, ohne die einleitenden und schließenden Klammern, kann innerhalb eines HTML-style
-Attributs platziert werden.
CSS-Regelsätze
Wenn Stylesheets nur eine Deklaration auf jedes Element einer Webseite anwenden könnten, wären sie ziemlich nutzlos. Das eigentliche Ziel ist es, unterschiedliche Deklarationen auf verschiedene Teile des Dokuments anzuwenden.
CSS ermöglicht dies, indem Deklarationsblöcken Bedingungen zugeordnet werden. Jeder (gültige) Deklarationsblock wird von einem oder mehreren durch Komma getrennten Selektoren vorangegangen, die Bedingungen darstellen, um einige Elemente der Seite auszuwählen. Eine Selektorliste und ein zugehöriger Deklarationsblock zusammen werden als Regelsatz oder oft als Regel bezeichnet.
Ein CSS-Regelsatz (oder Regel) wird in dem folgenden Diagramm dargestellt.
Da ein Element der Seite von mehreren Selektoren und damit von mehreren Regeln potenziell mehrfach mit einer gegebenen Eigenschaft, aber unterschiedlichen Werten, übereinstimmen kann, definiert der CSS-Standard, welche Eigenschaft Vorrang hat und angewendet werden muss: Dies wird als Kaskadenalgorithmus bezeichnet (siehe Konflikte behandeln).
Hinweis: Es ist wichtig zu beachten, dass selbst wenn ein Regelsatz, der durch eine Gruppe von Selektoren gekennzeichnet ist, eine Art Abkürzung ersetzt, die Regeln mit jeweils einem einzigen Selektor ersetzt, dies nicht für die Gültigkeit des Regelsatzes selbst gilt.
Dies führt zu einer wichtigen Konsequenz: Wenn ein einzelner Basisselektor ungültig ist, wie bei der Verwendung eines unbekannten Pseudo-Elements oder einer Pseudo-Klasse, ist der gesamte Selektor ungültig und daher wird die gesamte Regel als ungültig ignoriert.
CSS-Anweisungen
Regelsätze sind die Hauptbausteine eines Stylesheets, das oft nur eine große Liste von ihnen besteht. Aber es gibt andere Informationen, die ein Webautor im Stylesheet vermitteln möchte, wie den Zeichensatz, andere zu importierende externe Stylesheets, Schriftschnitt- oder Listenbeschreibungen und vieles mehr. Dafür werden andere und spezifische Arten von Anweisungen verwendet.
Eine Anweisung ist ein Baustein, der mit einem beliebigen Nicht-Leerzeichen-Zeichen beginnt und am ersten schließenden Klammer oder Semikolon endet (außerhalb eines Strings, nicht-escaped und nicht in ein anderes {}, () oder [] Paar eingeschlossen).
Es gibt zwei Arten von Anweisungen:
- Regelsätze (oder Regeln), die, wie gesehen, eine Sammlung von CSS-Deklarationen mit einer Bedingung assoziieren, die von einem Selektor beschrieben wird.
- At-Rules, die mit einem At-Zeichen beginnen,
@
(U+0040 COMMERCIAL AT), gefolgt von einem Bezeichner und dann bis zum Ende der Anweisung fortgesetzt werden, also bis zum nächsten Semikolon (;) außerhalb eines Blocks oder dem Ende des nächsten Blocks. Jede Art von At-Rules, die durch den Bezeichner definiert wird, kann ihre eigene interne Syntax und Semantik haben. Sie werden verwendet, um Metadateninformationen zu übermitteln (wie@layer
oder@import
), bedingte Informationen (wie@media
oder@document
), oder beschreibende Informationen (wie@font-face
).
Jede Anweisung, die weder ein Regelsatz noch ein At-Rule ist, ist ungültig und wird ignoriert.
Verschachtelte Anweisungen
Es gibt eine andere Gruppe von Anweisungen – die verschachtelten Anweisungen. Diese sind Anweisungen, die in einem bestimmten Unterbereich von At-Rules verwendet werden können – den Bedingungsgruppenregeln. Diese Anweisungen gelten nur, wenn eine bestimmte Bedingung erfüllt ist: Der Inhalt der @media
-At-Rule wird nur angewendet, wenn das Gerät, auf dem der Browser läuft, die ausgedrückte Bedingung erfüllt; der @document
-At-Rule-Inhalt wird nur angewendet, wenn die aktuelle Seite einige Bedingungen erfüllt, und so weiter. In CSS1 und CSS2.1 konnten innerhalb von Bedingungsgruppenregeln nur Regelsätze verwendet werden. Das war sehr einschränkend und diese Einschränkung wurde in CSS Conditionals Level 3 aufgehoben. Jetzt, obwohl noch experimentell und nicht von jedem Browser unterstützt, können Bedingungsgruppenregeln eine breitere Auswahl an Inhalten enthalten: Regelsätze, aber auch einige, aber nicht alle, At-Rules.