System kolorów Frutjam wykorzystuje semantyczne tokeny CSS zaprojektowane tak, aby od razu spełniać współczynniki kontrastu WCAG AA. Brak JavaScript, obsługa trybu ciemnego, kompatybilność z Tailwind CSS v4. Działa z Django, HTMX, Laravel i dowolnym stosem obsługującym tylko CSS.
Frutjam wykorzystuje niestandardowe właściwości CSS jako tokeny projektu dla wszystkich kolorów. Każdy kolor jest zdefiniowany dla motywu i automatycznie współpracuje z klasami narzędzi CSS Tailwind — nie jest wymagana dodatkowa konfiguracja. Tylko CSS, nie wymaga JavaScript. Kontrast WCAG AA gwarantowany dla każdej pary kolorów, współpracuje z Django, HTMX, Laravel, React i dowolnym projektem Tailwind CSS v4.
Nazwy kolorów
Frutjam definiuje następujące semantyczne role kolorów. Każdy kolor ma pasujący token on-{color} dla dostępnego tekstu na pierwszym planie.
on-{color} jest ręcznie dostrajana w OKLCH, aby spełnić wymagania kontrastu WCAG AA. W przeciwieństwie do bibliotek, które automatycznie obliczają kolory pierwszego planu, Frutjam udostępnia jawne, zweryfikowane pary, dzięki czemu dostęp do komponentów jest zgodny z projektem, a nie przypadkowy.
| Kolor | Znak | Zamiar |
|---|---|---|
| base | --color-base | Tło strony |
| neutral | --color-neutral | Powierzchnie, paski boczne, nakładki |
| primary | --color-primary | Podstawowy kolor marki |
| secondary | --color-secondary | Kolor drugorzędny marki |
| accent | --color-accent | Kolor akcentu/podkreślenia |
| info | --color-info | Komunikaty informacyjne |
| success | --color-success | Stany sukcesu |
| warning | --color-warning | Stany ostrzegawcze |
| error | --color-error | Stany błędne i destrukcyjne |
Zajęcia z użyteczności kolorów
Wszystkie kolory Frutjam współpracują z dowolnym narzędziem do tworzenia kolorów CSS Tailwind. Zastąp {color} dowolną nazwą koloru z powyższej tabeli.
| Klasa | Opis |
|---|---|
bg-{color} | Kolor tła |
text-{color} | Kolor tekstu |
border-{color} | Kolor obramowania |
ring-{color} | Kolor pierścionka |
outline-{color} | Kolor konturu |
shadow-{color} | Kolor cienia |
fill-{color} | Kolor wypełnienia SVG |
stroke-{color} | Kolor obrysu SVG |
decoration-{color} | Kolor dekoracji tekstu |
caret-{color} | Wprowadź kolor karetki |
placeholder-{color} | Kolor tekstu zastępczego |
divide-{color} | Kolor obramowania rozdzielacza |
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> |
Modyfikator krycia
Kontroluj krycie kolorów za pomocą modyfikatora /{value}, tak jak w przypadku każdego koloru Tailwind.
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> |
Zmienne CSS motywu
Są to tokeny główne, które definiujesz podczas tworzenia niestandardowego motywu. Wszystkie inne żetony kolorów są obliczane automatycznie na ich podstawie.
| Zmienna CSS | Opis |
|---|---|
--scheme-color | Schemat kolorów: jasny lub ciemny |
--border-radius | Podstawowy promień obramowania komponentów |
--color-base | Kolor tła strony |
--color-on-base | Domyślny kolor tekstu na tle bazowym |
--color-neutral | Neutralny kolor powierzchni |
--color-on-neutral | Kolor tekstu na neutralnych powierzchniach |
--color-primary | Podstawowy kolor marki |
--color-on-primary | Kolor tekstu na tle podstawowym |
--color-secondary | Kolor drugorzędny marki |
--color-on-secondary | Kolor tekstu na tle wtórnym |
--color-accent | Kolor akcentujący |
--color-on-accent | Kolor tekstu na akcentowanym tle |
--color-info | Kolor informacji |
--color-on-info | Kolor tekstu na tłach informacyjnych |
--color-success | Kolor sukcesu |
--color-on-success | Kolor tekstu na tle sukcesu |
--color-warning | Kolor ostrzegawczy |
--color-on-warning | Kolor tekstu na tle ostrzeżeń |
--color-error | Kolor błędu |
--color-on-error | Kolor tekstu na tle błędów |
Obliczone tokeny kolorów
Frutjam automatycznie oblicza te tokeny na podstawie zmiennych motywu głównego — nie ustawia się ich ręcznie. Są one dostępne do użycia w niestandardowym CSS.
Skala (50–950)
Każdy kolor generuje pełną 11-stopniową skalę odcienia. Zamień {color} na dowolną nazwę koloru.
| Zmienna CSS | Opis |
|---|---|
--color-{color}-50 | Najjaśniejszy odcień (mieszanka kolorów 4%) |
--color-{color}-100 | Bardzo jasny odcień |
--color-{color}-200 | Lekki odcień |
--color-{color}-300 | Odcień średnio jasny |
--color-{color}-400 | Lekki odcień |
--color-{color}-500 | Kolor bazowy (taki sam jak --color-{color}) |
--color-{color}-600 | Lekki cień |
--color-{color}-700 | Średni odcień |
--color-{color}-800 | Ciemny odcień |
--color-{color}-900 | Bardzo ciemny odcień |
--color-{color}-950 | Najciemniejszy odcień |
Miękkie & Aktywny
Warianty świadome stanu elementów interaktywnych, automatycznie dostosowujące się do jasnych i ciemnych motywów.
| Zmienna CSS | Opis |
|---|---|
--color-{color}-soft | Subtelnie przyciemnione tło dla miękkich wariantów |
--color-on-{color}-soft | Kolor tekstu do stosowania na miękkim tle |
--color-{color}-active | Przyciemniony/rozjaśniony odcień dla stanów najechania i aktywności |
--color-body | Obliczony kolor tekstu podstawowego (nieznacznie złagodzony w stosunku do w bazie) |
Przykład niestandardowego motywu
Zastąp tokeny root, aby utworzyć niestandardowy motyw. Frutjam automatycznie oblicza wszystkie skale i stany.
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); } |