Zum Inhalt springen

Über Grabient

Grabient erstellt Farbverläufe aus Keyframes: 2 bis 8 Farben, durch eine glatte Kurve verbunden.

1 · Keyframes

Ein Keyframe ist eine Farbe, die du wählst. Wie in der Animation setzt du ein paar davon, und die Farben dazwischen werden ergänzt. Eine Palette hat 2 bis 8 Keyframes, gleichmäßig entlang des Farbverlaufs verteilt, der durch jeden von ihnen läuft:


Helligkeit, Anfang
Helligkeit, Ende
10

Chroma
0.300

Farbton
Farbtonweg
90°-90°

Die Punkte sind Keyframes. Der Graph zeigt Helligkeit, Chroma und Farbton entlang des Farbverlaufs. Zieh einen Punkt, um einen Keyframe zu ändern.

Jeder Keyframe besteht aus drei Zahlen in OKLCH. Die Helligkeit L reicht von 0 (Schwarz) bis 1 (Weiß). Das Chroma C gibt an, wie bunt er ist: 0 ist Grau, und die leuchtendsten Bildschirmfarben liegen bei etwa 0,3. Der Farbton H ist der Winkel auf dem Farbkreis, in Grad.

2 · Die Formel

Helligkeit, Chroma und Farbton haben jeweils eine eigene Kurve, die im Graphen oben dargestellt ist. Jede Kurve geht durch die Keyframes und biegt sich dazwischen sanft. Die Farbe an jeder Stelle ergibt sich aus den drei Kurven, dort abgelesen.

CSS- und Figma-Farbverläufe verbinden ihre Farbstopps mit geraden Linien, sodass eine leichte Kante sichtbar werden kann, wo der Übergang sein Tempo ändert.

In der Formel läuft t von 0 am Anfang des Farbverlaufs bis 1 am Ende. Bei K Keyframes liegt Keyframe i bei t = i / (K − 1), gezählt ab 0. Jede Kurve ist ein Catmull-Rom-Spline, und gamut() passt die Farbe an den Bildschirm an (Abschnitt 6):

color(t) = gamut( L(t), C(t), H(t) )

// one axis: a Catmull–Rom spline through K evenly spaced valuesconst { min, max, floor } = Math;function spline(v, t) {  const K = v.length, x = min(max(t, 0), 1) * (K - 1);  const i = min(K - 2, floor(x)), u = x - i;  const p0 = v[max(i - 1, 0)], p1 = v[i];  const p2 = v[i + 1], p3 = v[min(i + 2, K - 1)];  return p1 + 0.5 * u * (p2 - p0    + u * (2*p0 - 5*p1 + 4*p2 - p3    + u * (3*(p1 - p2) + p3 - p0)));}// the color at t from the keyframes' L, C and H. A spline can overshoot// between keyframes, so L is kept in 0..1 and C at 0 or more. The// browser fits an oklch() color to the screen (section 6).function color(L, C, H, t) {  const l = min(max(spline(L, t), 0), 1), c = max(spline(C, t), 0);  return `oklch(${l} ${c} ${spline(H, t)})`;}

3 · Stufen

Um den Farbverlauf darzustellen, entnimmt Grabient Farben an gleichmäßig verteilten Stellen, Stufen genannt. Die erste und die letzte Stufe sind der erste und der letzte Keyframe. Stile mit Farbverlauf nutzen die Stufen als Farbstopps. Gestufte Stile zeigen jede Stufe als einfarbigen Streifen. Es gibt nie weniger Stufen als Keyframes:

Dieselbe Palette in 7 Stufen. Punkte markieren die Keyframes.
Stufen

4 · Warum OKLCH

RGB und HSL beschreiben, wie ein Bildschirm Licht mischt, und ihre Zahlen passen oft nicht zu dem, was wir sehen. Reines Gelb und reines Blau haben beide eine HSL-Helligkeit von 50 %, doch das Gelb wirkt viel heller. OKLCH gibt ihnen 0,97 und 0,45. Es ist Björn Ottossons OKLab in Polarform, so gebaut, dass gleiche Änderungen seiner Zahlen gleich aussehen. Zwei Farben, auf beide Arten gemischt:

Grün und Magenta, in RGB (oben) und OKLCH (unten) gemischt. Die RGB-Mischung wird in der Mitte grau.

Da Helligkeit, Chroma und Farbton getrennt sind, behält ein Keyframe seine Helligkeit, wenn du seinen Farbton änderst.

5 · Farbton über 360° hinaus

Zwischen zwei Farbtönen kann ein Farbverlauf in beide Richtungen um den Farbkreis laufen, und die meisten Tools nehmen den kürzeren Weg. Grabient lässt den Farbton über 360° hinaus zählen: 690° ist dieselbe Farbe wie 330°, eine Runde später. Der Farbverlauf legt den ganzen Weg zurück:

Beide Streifen enden mit derselben Farbe. Oben: Farbton 210° bis 330°. Unten: 210° bis 690°, eine Runde mehr.

Der Farbtonweg einer Palette ist ihr letzter Farbton minus ihr erster, Runden eingeschlossen, sodass ein ganzer Regenbogen 360° zurücklegt. Benachbarte Keyframes können bis zu 540° auseinanderliegen.

6 · Farben, die ein Bildschirm nicht darstellen kann

OKLCH kann Farben beschreiben, die leuchtender sind, als ein Bildschirm sie darstellen kann. Bei solchen Farben behält Grabient Helligkeit und Farbton bei und senkt das Chroma, bis die Farbe passt: sRGB auf einem Standardbildschirm, Display P3 auf einem Wide-Gamut-Bildschirm. CSS Color 4 macht dasselbe für oklch()-Farben:

Chroma
0.350
Gepunktet: das angeforderte Chroma. Durchgezogen: was der Bildschirm zeigt. Zieh die Linie, um mehr oder weniger anzufordern.

7 · Rezepte

Einige Paletten und die Kurven, aus denen sie bestehen:

Sonnenuntergang: Die Helligkeit fällt von 0,86 auf 0,32, das Chroma erreicht seinen Höchstwert von 0,19 und der Farbton dreht sich von Gelb zu Karminrot.Bearbeiten
Spektrum: zwei Keyframes mit gleicher Helligkeit, gleichem Chroma und einem Farbton, der 360° zurücklegt.Bearbeiten
Duoton: zwei Keyframes, in der Helligkeit weit auseinander (0,92 und 0,22) und im Farbton 130° voneinander entfernt.Bearbeiten
Pastelltöne: hohe Helligkeit (ab 0,87) und niedriges Chroma (bis 0,06).Bearbeiten
Grautöne: Chroma 0 bei jedem Keyframe.Bearbeiten

Umkehren bringt die Keyframes in die umgekehrte Reihenfolge. Invertieren erzeugt ein Negativ: Jede Helligkeit L wird zu 1 − L, und jeder Farbton dreht sich um 180°.

8 · Der Seed

Die Adresse jeder Palette enthält ihren Seed, einen kurzen Code für ihre Keyframes. Der Seed der ersten Abbildung ist kW6iw33i87sY6O2wq7rmZ07I.

Ein Seed ist k, gefolgt von den in Bits gepackten Keyframes: 8 für die Helligkeit, 8 für das Chroma, 9 für den ersten Farbton, dann 10 für jeden weiteren Farbton, gespeichert als Änderung gegenüber dem vorherigen:

Zwei Keyframes ergeben einen Seed mit 11 Zeichen, acht einen mit 37. Jede Palette hat genau einen Seed.

Ein aus einer Hex-Farbe gesetzter Keyframe behält genau diese Farbe, in 24 Bit. Ein solcher Seed hat 9 bis 50 Zeichen.