Das Farbsystem von Frutjam verwendet semantische CSS-Token, die so konzipiert sind, dass sie standardmäßig die WCAG AA-Kontrastverhältnisse erfüllen. Kein JavaScript, Dark Mode-fähig, kompatibel mit Tailwind CSS v4. Funktioniert mit Django, HTMX, Laravel und jedem reinen CSS-Stack.
Frutjam verwendet benutzerdefinierte CSS-Eigenschaften als Design-Token für alle Farben. Jede Farbe wird pro Thema definiert und funktioniert automatisch mit Tailwind CSS-Dienstprogrammklassen, keine zusätzliche Konfiguration erforderlich. Nur CSS, kein JavaScript erforderlich. WCAG AA-Kontrast garantiert für jedes Farbpaar, funktioniert mit Django, HTMX, Laravel, React und jedem Tailwind CSS v4-Projekt.
Farbnamen
Frutjam definiert die folgenden semantischen Farbrollen. Zu jeder Farbe gibt es eine passende on-{color} Token für barrierefreien Vordergrundtext.
on-{color} Das Paar ist in OKLCH handabgestimmt, um die WCAG AA-Kontrastanforderungen zu erfüllen. Im Gegensatz zu Bibliotheken, die Vordergrundfarben automatisch berechnen, stellt Ihnen Frutjam explizite, verifizierte Paare zur Verfügung, sodass Ihre Komponenten durch Design und nicht durch Zufall zugänglich sind.| Farbe | Token | Zweck |
|---|---|---|
| Base | --color-base | Seitenhintergrund |
| neutral | --color-neutral | Oberflächen, Seitenleisten, Overlays |
| primär | --color-primary | Primäre Markenfarbe |
| sekundär | --color-secondary | Sekundäre Markenfarbe |
| Akzent | --color-accent | Akzent-/Hervorhebungsfarbe |
| Info | --color-info | Informationsnachrichten |
| Erfolg | --color-success | Erfolgszustände |
| Warnung | --color-warning | Warnzustände |
| Fehler | --color-error | Fehler und destruktive Zustände |
Farbskala (50–950)
Jede Farbe generiert eine 11-stufige Skala, die aus den Variablen Ihres Stammthemas berechnet wird color-mix() in OKLCH und nicht zur Erstellungszeit. Legen Sie eine Markenfarbe fest und alle elf Schritte folgen daraus, sodass Sie sie nie von Hand festlegen müssen.
Jeder Schritt ist eine CSS-Variable und ein Tailwind-Dienstprogramm zugleich: use var(--color-primary-700) in Ihrem eigenen CSS, oder bg-primary-700 im Markup. Bewegen Sie den Mauszeiger über ein Farbfeld, um beide Namen anzuzeigen.
primaryprimary 50primary 100primary 200primary 300primary 400primary 500primary 600primary 700primary 800primary 900primary 950secondarysecondary 50secondary 100secondary 200secondary 300secondary 400secondary 500secondary 600secondary 700secondary 800secondary 900secondary 950accentaccent 50accent 100accent 200accent 300accent 400accent 500accent 600accent 700accent 800accent 900accent 950infoinfo 50info 100info 200info 300info 400info 500info 600info 700info 800info 900info 950successsuccess 50success 100success 200success 300success 400success 500success 600success 700success 800success 900success 950warningwarning 50warning 100warning 200warning 300warning 400warning 500warning 600warning 700warning 800warning 900warning 950errorerror 50error 100error 200error 300error 400error 500error 600error 700error 800error 900error 950neutralneutral 50neutral 100neutral 200neutral 300neutral 400neutral 500neutral 600neutral 700neutral 800neutral 900neutral 950basebase 50base 100base 200base 300base 400base 500base 600base 700base 800base 900base 950Da die Schritte anhand Ihres Themas berechnet und nicht fest codiert sind, ist dieses Raster kein Abbild der Farben von Frutjam. Es sind deine Farben. Wechseln Sie das Thema und jedes Farbfeld oben bewegt sich mit, weshalb auch keine Hexadezimalwerte daneben aufgedruckt sind.
1 2 3 | <div class="bg-primary-100 text-primary-900 p-4 rounded">Light tint, dark text</div> <div class="bg-success-700 text-success-50 p-4 rounded">Dark shade, light text</div> <div class="border-2 border-error-400 text-error-600 p-4 rounded">Border and text</div> |
on- Farbe, daher gibt es keinen garantierten Kontrast dazu. Wenn Text auf einer Farbe liegt, verwenden Sie das Paar, das die Bibliothek testet: bg-primary mit text-on-primary.| CSS-Variable | Beschreibung |
|---|---|
--color-{color}-50 | 80 % des hellen Farbtons, 20 % der Farbe |
--color-{color}-100 | 65 % Licht, 35 % Farbe |
--color-{color}-200 | 50 % Licht, 50 % Farbe |
--color-{color}-300 | 35 % Licht, 65 % Farbe |
--color-{color}-400 | 18 % Licht, 82 % Farbe |
--color-{color}-500 | die Farbe selbst, genauso wie --color-{color} |
--color-{color}-600 | 18 % dunkler Farbton, 82 % Farbe |
--color-{color}-700 | 34 % dunkel, 66 % farbig |
--color-{color}-800 | 50 % dunkel, 50 % farbig |
--color-{color}-900 | 65 % dunkel, 35 % farbig |
--color-{color}-950 | 80 % dunkel, 20 % farbig |
Farbdienstprogrammklassen
Alle Frutjam-Farben funktionieren mit jedem CSS-Farbdienstprogramm von Tailwind. Ersetzen {color} mit einem beliebigen Farbnamen aus der Tabelle oben, optional gefolgt von einem Schritt aus der Skala 50–950: bg-primary, bg-primary-100, text-error-900, border-success-300.
| Klasse | Beschreibung |
|---|---|
bg-{color} | Hintergrundfarbe |
text-{color} | Textfarbe |
border-{color} | Randfarbe |
ring-{color} | Ringfarbe |
outline-{color} | Umrissfarbe |
shadow-{color} | Schattenfarbe |
fill-{color} | SVG-Füllfarbe |
stroke-{color} | SVG-Strichfarbe |
decoration-{color} | Farbe der Textdekoration |
caret-{color} | Geben Sie die Caret-Farbe ein |
placeholder-{color} | Farbe des Platzhaltertextes |
divide-{color} | Farbe des Teilerrahmens |
{utility}-{color}-{step} | Zum Beispiel jedes der oben genannten in einem Maßstabsschritt bg-accent-200 |
1 2 3 | <div class="bg-primary text-on-primary p-4 rounded">Primary background</div> <div class="bg-secondary text-on-secondary p-4 rounded">Secondary background</div> <div class="border border-primary text-primary p-4 rounded">Primary border and text</div> |
Deckkraftmodifikator
Steuern Sie die Farbdeckkraft mit /{value} Modifikator, genau wie jede Tailwind-Farbe.
1 2 3 | <div class="bg-primary/10 text-primary p-4 rounded">10% primary background</div> <div class="bg-primary/20 text-primary p-4 rounded">20% primary background</div> <div class="text-on-base/60 p-4">60% opacity text</div> |
Weich und aktiv
Statusbewusste Varianten für interaktive Elemente, die sich automatisch an helle und dunkle Themen anpassen.
| CSS-Variable | Beschreibung |
|---|---|
--color-{color}-soft | Dezent getönter Hintergrund für weiche Varianten |
--color-on-{color}-soft | Textfarbe zur Verwendung auf weichen Hintergründen |
--color-{color}-active | Abgedunkelter/aufgehellter Farbton für Schwebe- und Aktivzustände |
--color-body | Berechnete Textkörperfarbe (leicht abgeschwächt von on-base) |
Theme-CSS-Variablen
Dies sind die Root-Tokens, die Sie beim Erstellen eines benutzerdefinierten Designs definieren. Alle anderen Farbtoken werden automatisch daraus berechnet.
| CSS-Variable | Beschreibung |
|---|---|
--scheme-color | Farbschema: light oder dark |
--border-radius | Basisrandradius für Komponenten |
--color-base | Hintergrundfarbe der Seite |
--color-on-base | Standardtextfarbe auf Basishintergrund |
--color-neutral | Neutrale Oberflächenfarbe |
--color-on-neutral | Textfarbe auf neutralen Oberflächen |
--color-primary | Primäre Markenfarbe |
--color-on-primary | Textfarbe auf primären Hintergründen |
--color-secondary | Sekundäre Markenfarbe |
--color-on-secondary | Textfarbe auf sekundären Hintergründen |
--color-accent | Akzentfarbe |
--color-on-accent | Textfarbe auf Akzenthintergründen |
--color-info | Infofarbe |
--color-on-info | Textfarbe auf Info-Hintergründen |
--color-success | Erfolgsfarbe |
--color-on-success | Textfarbe auf Erfolgshintergründen |
--color-warning | Warnfarbe |
--color-on-warning | Textfarbe auf Warnhintergründen |
--color-error | Fehlerfarbe |
--color-on-error | Textfarbe auf Fehlerhintergründen |
Beispiel für ein benutzerdefiniertes Theme
Überschreiben Sie Root-Tokens, um ein benutzerdefiniertes Design zu erstellen. Frutjam berechnet alle Skalen und Zustände automatisch.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 | @import "tailwindcss"; @plugin "frutjam"; [data-theme="mytheme"] { --scheme-color: light; --border-radius: 0.5rem; --color-base: oklch(98% 0 0); --color-on-base: oklch(15% 0 0); --color-neutral: oklch(20% 0 0); --color-on-neutral: oklch(98% 0 0); --color-primary: oklch(55% 0.25 260); --color-on-primary: oklch(98% 0 0); --color-secondary: oklch(60% 0.20 320); --color-on-secondary: oklch(98% 0 0); --color-accent: oklch(65% 0.22 180); --color-on-accent: oklch(15% 0 0); --color-info: oklch(68% 0.17 237); --color-on-info: oklch(15% 0 0); --color-success: oklch(75% 0.20 150); --color-on-success: oklch(15% 0 0); --color-warning: oklch(82% 0.19 90); --color-on-warning: oklch(15% 0 0); --color-error: oklch(58% 0.24 27); --color-on-error: oklch(98% 0 0); } |