CSS

⌘K
  1. Home
  2. Docs
  3. CSS
  4. CSS @property

CSS @property

CSS @property: Die @property-Regel in CSS ist eine relativ neue, aber leistungsstarke Funktion, die es ermöglicht, benutzerdefinierte CSS-Eigenschaften (auch als „CSS-Variablen“ bezeichnet) zu definieren und ihnen spezifische Eigenschaften wie Typ, Standardwert und eine inherits-Option zuzuweisen. Dies bietet eine größere Kontrolle über CSS-Variablen und verbessert die Animation und die Validierung von Variablenwerten direkt in CSS.

Grundkonzepte

Definition einer CSS-Eigenschaft mit @property

Mit @property kann eine benutzerdefinierte CSS-Variable genau beschrieben werden. Die Regel unterstützt drei Parameter: syntax, inherits, und initial-value.

Grundlegende Syntax:

@property --custom-property {
    syntax: '<number>';       /* Der erwartete Datentyp */
    inherits: true;           /* Ob die Variable von Eltern- zu Kind-Elementen vererbt wird */
    initial-value: 1;         /* Der Standardwert */
}

Hier wird eine benutzerdefinierte CSS-Variable --custom-property erstellt, die einen numerischen Wert (<number>) erwartet, von übergeordneten Elementen vererbt wird und standardmäßig den Wert 1 hat.

Beispiel:

@property --main-opacity {
    syntax: '<number>';
    inherits: true;
    initial-value: 1;
}

.box {
    opacity: var(--main-opacity);
}

In diesem Beispiel kann --main-opacity verwendet werden, um den Wert der opacity-Eigenschaft in .box festzulegen. Da syntax auf <number> gesetzt ist, wird erwartet, dass --main-opacity eine Zahl ist.

Parameter der @property-Regel

  • syntax: Gibt den Datentyp an, der erwartet wird. Häufig verwendete Typen sind <color>, <length>, <number>, <percentage>, und <angle>.
  • inherits: Bestimmt, ob die Eigenschaft von einem übergeordneten Element vererbt wird (true) oder nicht (false). Standardmäßig ist dies auf false gesetzt.
  • initial-value: Setzt einen Standardwert, der verwendet wird, falls der Wert nicht anderweitig gesetzt wird. Ohne eine Vorgabe wird der Wert als undefined betrachtet.

Fortgeschrittene Konzepte

Animation von benutzerdefinierten Eigenschaften

Eine besondere Stärke der @property-Regel liegt in der Möglichkeit, benutzerdefinierte CSS-Eigenschaften zu animieren. Bei korrekt definiertem syntax können Sie Werte interpolieren und dynamisch zwischen verschiedenen Zuständen übergehen.

Beispiel einer animierbaren CSS-Eigenschaft:

@property --box-rotation {
    syntax: '<angle>';
    inherits: false;
    initial-value: 0deg;
}

.box {
    transform: rotate(var(--box-rotation));
    transition: --box-rotation 2s ease-in-out;
}

.box:hover {
    --box-rotation: 180deg;
}

In diesem Beispiel wird --box-rotation verwendet, um die Drehung der .box zu steuern. Wenn der Benutzer mit der Maus über das Element fährt, wird --box-rotation auf 180deg gesetzt, wodurch die Box um 180 Grad gedreht wird.

Komplexere Typen und Constraints

Sie können auch komplexere Datentypen verwenden, wie etwa <length-percentage>, um Variablen flexibel einzusetzen. Diese ermöglichen eine nahtlose Kombination von Pixel- und Prozentwerten.

Beispiel:

@property --dynamic-padding {
    syntax: '<length-percentage>';
    inherits: true;
    initial-value: 10%;
}

.container {
    padding: var(--dynamic-padding);
}

Hier wird --dynamic-padding entweder mit einer Länge (z. B. 10px) oder einem Prozentsatz (z. B. 20%) verwendet, was besonders nützlich für responsive Designs ist.

Best Practices

  • Präzise Datentypen verwenden: Geben Sie den genauen Datentyp im syntax-Parameter an, um die Validität und Konsistenz der CSS-Eigenschaft sicherzustellen.
  • Eindeutige Namen verwenden: Benennen Sie benutzerdefinierte Eigenschaften klar und deutlich, um ihre Funktion im Stylesheet leicht nachvollziehbar zu machen.
  • Nur das Nötigste animieren: Verwenden Sie animierbare Eigenschaften sparsam, da aufwendige Animationen die Performance beeinträchtigen können.

Häufig gestellte Fragen

Unterstützen alle Browser die @property-Regel?

Nein, @property wird derzeit nur von modernen Browsern wie Chrome, Edge und Opera unterstützt. Die Unterstützung in Safari und Firefox ist eingeschränkt.

Was passiert, wenn der syntax-Parameter nicht angegeben wird?

Fehlt syntax, wird die Variable als untypisiert betrachtet, und Animationen oder Übergänge funktionieren möglicherweise nicht wie erwartet.

Warum sollte man @property anstelle normaler CSS-Variablen verwenden?

@property bietet zusätzliche Kontrolle, insbesondere bei Animationen und Übergängen, und ermöglicht die Festlegung eines standardisierten Typs und eines Standardwertes.

Zusammenfassung

Die @property-Regel erweitert die Möglichkeiten von CSS-Variablen, indem sie zusätzliche Kontrolle über die Eigenschaften einer Variable bietet. Sie erlaubt Entwicklern, Datentypen und Standardwerte festzulegen und bietet so eine feinkörnigere Steuerung und verbesserte Interaktivität in modernen Webanwendungen.

Übungsaufgaben

  1. Definieren Sie eine benutzerdefinierte Eigenschaft --border-radius mit einem Datentyp <length>, die eine Box dynamisch mit JavaScript animiert.
  2. Verwenden Sie die @property-Regel, um eine Hintergrundfarbe (<color>) zu definieren, die beim Hover-Effekt animiert wird.

Handlungsempfehlungen

Verwenden Sie @property, um besser kontrollierte und animierbare CSS-Variablen zu erstellen, die sich gezielt für interaktive und responsive Designprojekte eignen.