Wertedefinition Syntax

Die CSS-Wertedefinition Syntax, eine formale Grammatik, wird verwendet, um die Menge der gültigen Werte für eine CSS-Eigenschaft oder Funktion zu definieren. Zusätzlich zu dieser Syntax kann die Menge der gültigen Werte durch semantische Einschränkungen weiter eingeschränkt werden (zum Beispiel, dass eine Zahl streng positiv sein muss).

Die Definitionssyntax beschreibt, welche Werte zulässig sind und die Interaktionen zwischen ihnen. Eine Komponente kann ein Schlüsselwort sein, einige Zeichen, die als Literal betrachtet werden, oder ein Wert eines gegebenen CSS-Datentyps oder einer anderen CSS-Eigenschaft.

Komponenten-Wertetypen

Schlüsselwörter

Allgemeine Schlüsselwörter

Ein Schlüsselwort mit einer vordefinierten Bedeutung erscheint wörtlich, ohne Anführungszeichen. Zum Beispiel: auto, smaller oder ease-in.

Der spezielle Fall von inherit, initial und unset

Alle CSS-Eigenschaften akzeptieren die Schlüsselwörter inherit, initial und unset. Sie werden in der Wertedefinition nicht angezeigt und sind implizit definiert.

Literale

In CSS können einige Zeichen allein stehen, wie der Schrägstrich (/) oder das Komma (,), und werden in einer Eigenschaftsdefinition verwendet, um ihre Teile zu trennen. Das Komma wird häufig verwendet, um Werte in Aufzählungen oder Parameter in mathematisch-ähnlichen Funktionen zu trennen; der Schrägstrich trennt oft Teile des Wertes, die semantisch unterschiedlich, aber syntaktisch gleich sind. Typischerweise wird der Schrägstrich in Kurzform-Eigenschaften verwendet; um Komponenten desselben Typs zu trennen, die jedoch zu unterschiedlichen Eigenschaften gehören.

Beide Symbole erscheinen wörtlich in einer Wertedefinition.

Datentypen

Grundlegende Datentypen

Einige Datentypen werden in ganz CSS verwendet und werden einmal für alle Werte in der Spezifikation definiert. Diese als grundlegende Datentypen bezeichnet, werden durch ihren Namen umgeben von den Symbolen < und > dargestellt: <angle>, <string>, …

Nicht-terminal Datentypen

Weniger gebräuchliche Datentypen, genannt nicht-terminal Datentypen, sind ebenfalls von < und > umgeben.

Nicht-terminale Datentypen gibt es in zwei Arten:

  • Datentypen, die denselben Namen wie eine Eigenschaft teilen, in Anführungszeichen gesetzt. In diesem Fall teilt der Datentyp denselben Wertebereich wie die Eigenschaft. Sie werden häufig in der Definition von Kurzform-Eigenschaften verwendet.
  • Datentypen, die nicht denselben Namen wie eine Eigenschaft teilen. Diese Datentypen sind den grundlegenden Datentypen sehr ähnlich. Sie unterscheiden sich von den grundlegenden Datentypen nur durch den physischen Ort ihrer Definition. In diesem Fall ist die Definition normalerweise physisch sehr nah an der Definition der Eigenschaft, die sie nutzt.

Komponenten-Wertekombinatoren

Klammern

Klammern umschließen mehrere Entitäten, Kombinatoren und Multiplikatoren und transformieren sie dann als eine einzige Komponente. Sie werden verwendet, um Komponenten zu gruppieren, um die Vorrangregeln zu umgehen.

css
bold [ thin && <length> ]

Dieses Beispiel entspricht folgenden Werten:

  • bold thin 2vh
  • bold 0 thin
  • bold thin 3.5em

Aber nicht:

  • thin bold 3em, da bold neben der durch die Klammern definierten Komponente steht, muss es davor erscheinen.

Aneinanderreihung

Mehrere Schlüsselwörter, Literale oder Datentypen nebeneinander zu platzieren, die nur durch ein oder mehrere Leerzeichen getrennt sind, wird Aneinanderreihung genannt. Alle aneinandergereihten Komponenten sind obligatorisch und sollten in der genauen Reihenfolge erscheinen.

css
bold <length>, thin

Dieses Beispiel entspricht folgenden Werten:

  • bold 1em, thin
  • bold 0, thin
  • bold 2.5cm, thin
  • bold 3vh, thin

Aber nicht:

  • thin 1em, bold, da die Entitäten in der angegebenen Reihenfolge sein müssen
  • bold 1em thin, da die Entitäten obligatorisch sind; das Komma, ein Literal, muss vorhanden sein
  • bold 0.5ms, thin, da die ms Werte nicht <length> sind

Doppeltes Und-Zeichen

Das Trennen von zwei oder mehr Komponenten durch ein doppeltes Und-Zeichen, &&, bedeutet, dass all diese Entitäten obligatorisch, aber in beliebiger Reihenfolge erscheinen können.

css
bold && <length>

Dieses Beispiel entspricht folgenden Werten:

  • bold 1em
  • bold 0
  • 2.5cm bold
  • 3vh bold

Aber nicht:

  • bold, da beide Komponenten in dem Wert erscheinen müssen.
  • bold 1em bold, da beide Komponenten nur einmal erscheinen dürfen.

Hinweis: Die Aneinanderreihung hat Vorrang vor dem doppelten Und-Zeichen, was bedeutet, dass bold thin && <length> gleichbedeutend ist mit [ bold thin ] && <length>. Es beschreibt bold thin <length> oder <length> bold thin, aber nicht bold <length> thin.

Doppelbalken

Das Trennen von zwei oder mehr Komponenten durch einen Doppelbalken, ||, bedeutet, dass alle Entitäten Optionen sind: Mindestens eine muss vorhanden sein, und sie können in beliebiger Reihenfolge erscheinen. Typischerweise wird dies verwendet, um die verschiedenen Werte einer Kurzform-Eigenschaft zu definieren.

css
<'border-width'> || <'border-style'> || <'border-color'>

Dieses Beispiel entspricht folgenden Werten:

  • 1em solid blue
  • blue 1em
  • solid 1px yellow

Aber nicht:

  • blue yellow, da eine Komponente nur einmal erscheinen darf.
  • bold, da es kein Schlüsselwort ist, das als Wert einer der Entitäten zulässig ist.

Hinweis: Das doppelte Und-Zeichen hat Vorrang vor dem Doppelbalken, was bedeutet, dass bold || thin && <length> gleichbedeutend ist mit bold || [ thin && <length> ]. Es beschreibt bold, thin <length>, bold thin <length>, oder thin <length> bold, jedoch nicht <length> bold thin, da bold, wenn nicht weggelassen, vor oder nach der gesamten thin && <length>-Komponente platziert werden muss.

Einfacher Balken

Das Trennen von zwei oder mehr Entitäten durch einen einfachen Balken, |, bedeutet, dass alle Entitäten exklusive Optionen sind: Genau eine dieser Optionen muss vorhanden sein. Dies wird typischerweise verwendet, um eine Liste möglicher Schlüsselwörter zu trennen.

css
<percentage> | <length> | left | center | right | top | bottom

Dieses Beispiel entspricht folgenden Werten:

  • 3%
  • 0
  • 3.5em
  • left
  • center
  • right
  • top
  • bottom

Aber nicht:

  • center 3%, da nur eine der Komponenten vorhanden sein darf.
  • 3em 4.5em, da eine Komponente höchstens einmal vorhanden sein darf.

Hinweis: Der Doppelbalken hat Vorrang vor dem einfachen Balken, was bedeutet, dass bold | thin || <length> gleichbedeutend ist mit bold | [ thin || <length> ]. Es beschreibt bold, thin, <length>, <length> thin, oder thin <length>, jedoch nicht bold <length>, da nur eine Entität von jeder Seite des | Kombinators vorhanden sein kann.

Komponenten-Wertmultiplikatoren

Ein Multiplikator ist ein Zeichen, das angibt, wie oft eine vorhergehende Entität wiederholt werden kann. Ohne Multiplikator muss eine Entität genau einmal erscheinen.

Multiplikatoren können nicht hinzugefügt werden und haben Vorrang vor allen Kombinatoren.

Sternchen (*)

Der Sternchen-Multiplikator gibt an, dass die Entität null, einmal oder mehrmals erscheinen kann.

css
bold smaller*

Dieses Beispiel entspricht folgenden Werten:

  • bold
  • bold smaller
  • bold smaller smaller
  • bold smaller smaller smaller, und so weiter.

Aber nicht:

  • smaller, da bold aneinandergereiht ist und vor jedem smaller-Schlüsselwort erscheinen muss.

Pluszeichen (+)

Der Plus-Multiplikator gibt an, dass die Entität einmal oder mehrmals erscheinen kann.

css
bold smaller+

Dieses Beispiel entspricht folgenden Werten:

  • bold smaller
  • bold smaller smaller
  • bold smaller smaller smaller, und so weiter.

Aber nicht:

  • bold, da smaller mindestens einmal erscheinen muss.
  • smaller, da bold aneinandergereiht ist und vor jedem smaller-Schlüsselwort erscheinen muss.

Fragezeichen (?)

Der Fragezeichen-Multiplikator zeigt an, dass die Entität optional ist und null oder einmal erscheinen muss.

css
bold smaller?

Dieses Beispiel entspricht folgenden Werten:

  • bold
  • bold smaller

Aber nicht:

  • bold smaller smaller, da smaller höchstens einmal erscheinen darf.
  • smaller, da bold aneinandergereiht ist und vor jedem smaller-Schlüsselwort erscheinen muss.

Geschweifte Klammern ({ })

Der Multiplikator für geschweifte Klammern, der zwei durch ein Komma getrennte Ganzzahlen A und B einschließt, gibt an, dass die Entität mindestens A-mal und höchstens B-mal erscheinen muss.

css
bold smaller{1,3}

Dieses Beispiel entspricht folgenden Werten:

  • bold smaller
  • bold smaller smaller
  • bold smaller smaller smaller

Aber nicht:

  • bold, da smaller mindestens einmal erscheinen muss.
  • bold smaller smaller smaller smaller, da smaller höchstens dreimal erscheinen darf.
  • smaller, da bold aneinandergereiht ist und vor jedem smaller-Schlüsselwort erscheinen muss.

Rautezeichen (#)

Der Rautezeichen-Multiplikator gibt an, dass die Entität einmal oder mehrmals wiederholt werden kann (z.B. der Plus-Multiplikator), aber jedes Vorkommen wird durch ein Komma (',') getrennt.

css
bold smaller#

Dieses Beispiel entspricht folgenden Werten:

  • bold smaller
  • bold smaller, smaller
  • bold smaller, smaller, smaller, und so weiter.

Aber nicht:

  • bold, da smaller mindestens einmal erscheinen muss.
  • bold smaller smaller smaller, da die verschiedenen Vorkommen von smaller durch Kommas getrennt sein müssen.
  • smaller, da bold aneinandergereiht ist und vor jedem smaller-Schlüsselwort erscheinen muss.

Das Rautezeichen kann optional von geschweiften Klammern gefolgt werden, um anzugeben, wie oft die Entität wiederholt wird.

css
bold smaller#{1,3}

Dieses Beispiel entspricht folgenden Werten:

  • bold smaller
  • bold smaller, smaller
  • bold smaller, smaller, smaller

Aber nicht:

  • bold smaller, smaller, smaller, smaller, da smaller höchstens dreimal erscheinen darf.
css
bold smaller#{2}

Dieses Beispiel entspricht dem folgenden Wert:

  • bold smaller, smaller

Aber nicht:

  • bold smaller, da smaller genau zweimal erscheinen muss.

Ausrufezeichen (!)

Der Ausrufezeichen-Multiplikator nach einer Gruppe gibt an, dass die Gruppe erforderlich ist und mindestens einen Wert erzeugen muss; selbst wenn die Grammatik der Elemente innerhalb der Gruppe andernfalls erlauben würde, dass der gesamte Inhalt ausgelassen wird, darf mindestens ein Komponentenwert nicht ausgelassen werden.

css
[ bold? smaller? ]!

Dieses Beispiel entspricht folgenden Werten:

  • bold
  • smaller
  • bold smaller

Aber nicht:

  • weder bold noch smaller, da einer von ihnen erscheinen muss.
  • smaller bold, da bold aneinandergereiht ist und vor dem smaller-Schlüsselwort erscheinen muss.
  • bold smaller bold, da bold und smaller nur einmal erscheinen dürfen.

Klammerbereichsnotation ([min,max])

Einige Typen können numerische Werte innerhalb eines bestimmten Bereichs akzeptieren. Zum Beispiel kann die column-count-Eigenschaft einen ganzzahligen Wert zwischen positiv 1 und Unendlich, inklusive, akzeptieren. Die entsprechende Syntax sieht folgendermaßen aus:

<integer [1,∞]>

Ein Wert außerhalb dieses angegebenen Bereichs führt dazu, dass die gesamte Deklaration ungültig ist, und wird daher vom Browser ignoriert.

Die Klammerbereichsnotation [min, max] gibt einen inklusiven Bereich zwischen einem min- und max-Wert an. Diese Notation wird in numerischen Typ-Notationen verwendet und kann Einheiten enthalten, z.B. <angle [0,180deg]>. Positive und negative Unendlichkeit (-∞ und ∞) dürfen keine Einheiten haben. In Einheiten spezifizierte Typen können Nullwerte mit oder ohne Einheiten haben, z.B. <time [0s,10s]> oder <time [0,10s]>.

Hier sind einige weitere Beispiele:

  • <integer [-∞,∞]>: Jede ganze Zahl von negativer Unendlichkeit bis positiver Unendlichkeit.
  • <integer [0,∞]>: Jede ganze Zahl von 0 bis positive Unendlichkeit ist gültig. Negative ganze Zahlen sind ungültig.
  • <time [0s,10s]> oder <time [0,10s]>: Jede Dauer von 0 bis 10 Sekunden ist gültig.
  • <integer [-∞,-1]> | <integer [1,∞]>: Jede ganze Zahl außer Null ist gültig.

Zusammenfassung

Zeichen Name Beschreibung Beispiel
Kombinatoren
Aneinanderreihung Komponenten sind obligatorisch und sollten in dieser Reihenfolge erscheinen solid <length>
&& Doppeltes Und-Zeichen Komponenten sind obligatorisch, können aber in beliebiger Reihenfolge erscheinen <length> && <string>
|| Doppelbalken Mindestens eine der Komponenten muss vorhanden sein, und sie können in beliebiger Reihenfolge erscheinen. <'border-image-outset'> || <'border-image-slice'>
| Einfacher Balken Genau eine der Komponenten muss vorhanden sein smaller | small | normal | big | bigger
[ ] Klammern Gruppieren von Komponenten, um Vorrangregeln zu umgehen bold [ thin && <length> ]
Multiplikatoren
Kein Multiplikator Genau 1 Mal solid
* Sternchen 0 oder mehr Male bold smaller*
+ Pluszeichen 1 oder mehr Male bold smaller+
? Fragezeichen 0 oder 1 Mal (optional) bold smaller?
{min,max} Geschweifte Klammern Mindestens min Mal, höchstens max Mal bold smaller{1,3}
# Rautezeichen 1 oder mehr Male, wobei jedes Vorkommen durch ein Komma (,) getrennt ist bold smaller#
! Ausrufezeichen Gruppe muss mindestens 1 Wert erzeugen [ bold? smaller? ]!
Bereiche
[min,max] Numerischer Klammerbereich Gibt einen numerischen Bereich an <integer [0,∞]>

Spezifikationen

Specification
CSS Values and Units Module Level 4
# value-defs

Siehe auch