Using @property für CSS Custom Properties

Avatar of Chris Coyier
Chris Coyier am

DigitalOcean bietet Cloud-Produkte für jede Phase Ihrer Reise. Starten Sie mit 200 $ kostenlosem Guthaben!

Una Kravetz untersucht, wie Chrome jetzt CSS-Custom-Properties direkt aus CSS mit mehr Informationen als nur einem String deklarieren lässt.

Anstatt also so etwas wie das hier

html {
  --stop: 50%;
}

…kann mit mehr Details wie diesem deklariert werden

@property --stop {
  syntax: "<percentage>";
  initial-value: 50%;
  inherits: false;
}

Der Browser weiß dann, dass diese spezielle benutzerdefinierte Eigenschaft ein Prozentsatz und kein String ist. Es können auch andere nützliche Dinge wie <integer> und <color> sein. Jetzt, da wir dem Browser diese Art von Informationen mitteilen können, erhalten wir einige neue Möglichkeiten, wie zum Beispiel den Übergang zwischen zwei Werten.

Beim Herumspielen habe ich bemerkt, dass die zu animierende Eigenschaft sehr spezifisch genannt werden muss (da ein Catch-all transition nicht ausreicht). Versuche, über diese Demo zu fahren, die eine Nachbildung dessen ist, was Una im Beitrag gemacht hat.

Beachte, dass ich die Position des Farbstopps (die ein Prozentsatz ist) animiere, aber ich versuche auch, die Farbe zu animieren, was immer noch nicht funktioniert. Ich nahm an, dass es mit dieser neuen Funktion funktionieren würde. Ich weiß, dass die Leute schon lange verwirrt über das Fehlen der Möglichkeit sind, Farbverläufe zu animieren. (Siehe Ana Tudors Artikel.)

Sie können die Eigenschaften jederzeit auf einer hohen Ebene neu deklarieren, um Browser zu "unterstützen", die keine benutzerdefinierten Eigenschaften lesen können. Es fühlt sich wie eine lustige Zeit an, darüber zu sprechen. Safari scheint ein starkes Interesse an diesen Houdini-basierten Dingen zu signalisieren, aber noch nicht. Firefox? Ach, ich weiß nicht. Bestenfalls wissen wir, dass sie es vor all den Entlassungen als "Worth Prototyping" (Prototyping-würdig) eingestuft haben.

Dies wird auch bei einem seltsamen Fallback-Problem mit CSS-Custom-Properties helfen, das wir im Newsletter erwähnt haben.

Wie bei jeder anderen benutzerdefinierten Eigenschaft können Sie Werte abrufen (mit var) oder setzen (schreiben/überschreiben), aber mit Houdini-Custom-Properties, wenn Sie einen falsey-Wert setzen, wenn Sie ihn überschreiben, sendet die CSS-Rendering-Engine den ursprünglichen Wert (seinen Fallback-Wert), anstatt die Zeile zu ignorieren.