Namenskonventionen
Das Farbsystem besteht aus 2 Schichten:
- Hue-Farbpalette: 11 vordefinierte Grundfarben (+ Grau) und jeweils 9 Helligkeitsabstufungen – sie definiert alle benutzbaren Farben.
- „Semantische“ Farbpalette: Jede semantische Farbe referenziert eine der Grundfarben.
Dieser Ansatz erlaubt es Farben im Nachhinein zu ändern ohne dass die Webseite visuell inkonsistent wird und Farbalternativen für den Dark-Mode zu definieren.
Die Hue-Farbpalette
Die 11 Grundfarben werden im HSL-Farbmodell (H = Hue/Farbwert, S = Saturation/Farbsättigung, L = Lightness/Hellwert) definiert. Die Farbwerte liegen dabei in diskreten Abständen von 15° auf dem Hue-Kreis voneinander entfernt, die Sättigungs- und Helligkeitswerte ungefähr im gleichen Bereich damit die Farben gut harmonieren.
Alle Farben sind als Custom Properties (aka CSS Variables) angelegt, die hellen/dunklen Varianten werden automatisch berechnet.
- Für helle Varianten wird der Lightness-Wert erhöht und die Saturation verringert.
- Für dunkle Varianten wird Lightness reduziert und Saturation erhöht.
Damit das funktioniert sind die Werte für H/S/L getrennt voneinander angegeben. z.B.:
// Nur diese Werte sollten verändert werden:
--color-red-h: 0;
--color-red-s: 80%;
--color-red-l: 50%;
// Automatische Farbwertberechnung, bitte nicht anfassen:
--color-red: hsl(var(--color-red-h), var(--color-red-s), var(--color-red-l));
--color-red-100: hsl(var(--color-red-h), calc(var(--color-red-s) - 20%), calc(var(--color-red-l) + 40%));
--color-red-200: hsl(var(--color-red-h), calc(var(--color-red-s) - 15%), calc(var(--color-red-l) + 30%));
--color-red-300: hsl(var(--color-red-h), calc(var(--color-red-s) - 10%), calc(var(--color-red-l) + 20%));
--color-red-400: hsl(var(--color-red-h), calc(var(--color-red-s) - 05%), calc(var(--color-red-l) + 10%));
--color-red-500: hsl(var(--color-red-h), calc(var(--color-red-s) + 00%), calc(var(--color-red-l) - 0%));
--color-red-600: hsl(var(--color-red-h), calc(var(--color-red-s) + 05%), calc(var(--color-red-l) - 10%));
--color-red-700: hsl(var(--color-red-h), calc(var(--color-red-s) + 10%), calc(var(--color-red-l) - 20%));
--color-red-800: hsl(var(--color-red-h), calc(var(--color-red-s) + 15%), calc(var(--color-red-l) - 30%));
--color-red-900: hsl(var(--color-red-h), calc(var(--color-red-s) + 20%), calc(var(--color-red-l) - 40%));
Für jede Farbe ist eine Klasse und ein SASS-Mixin vordefiniert damit man schnell Blöcke einfärben kann. Die Textfarbe wird automatisch so gesetzt dass der Kontrast hoch genug ist.z.B:
@mixin bg-red-600 {
background-color: var(--color-red);
color: var(--color-white);
}
.bg-red-600 {
@include bg-red-600;
}
Grey HSL(225, 10%, 50%)
Red HSL(0, 80%, 50%)
Orange HSL(30, 80%, 55%)
Yellow HSL(45, 100%, 55%)
Lime HSL(60, 65%, 50%)
Green HSL(135, 55%, 50%)
Cyan HSL(180, 80%, 45%)
Teal HSL(195, 70%, 55%)
Blue HSL(225, 60%, 50%)
Indigo HSL(240, 70%, 52%)
Purple HSL(270, 80%, 50%)
Pink HSL(330, 80%, 50%)
Beispiel für eine „semantische“ Farbpalette:
--color-text: var(--color-indigo-900);
--color-links: var(--color-blue);
--color-links-hover: var(--color-blue-800);
--color-primary: var(--color-indigo-800);
--color-accent: var(--color-pink);
--color-neutral: var(--color-grey-300);
--color-error: var(--color-red);
--color-warning: var(--color-yellow);
--color-success: var(--color-green);
--color-info: var(--color-teal);
Weiterführende Informationen
- Color in UI Design: A (Practical) Framework
- Generating Shades of Color Using CSS Variables
- Building Themes with CSS4 Color Features
- CSS Color Module Level 5
- CSS Variables Guide: Color Manipulation and Dark Mode
- Building Your Color Palette
- The Theory: A Semantic Color System
- CSS can do that? Color manipulation for the fearless
- Calculating Color: Dynamic Color Theming with Pure CSS
- CSS Tricks | What do you name color variables?