Dlaczego projekt graficzny potrzebuje „systemu”, a nie tylko ładnych ekranów

Remigiusz Szulc
24.11.2025

Jednorazowo zaprojektowany layout potrafi wyglądać świetnie, ale bez systemu szybko się „rozsypuje”. Nowe widoki, warianty, języki, tryb ciemny, zmiany w brandingu — wszystko to mnoży ręczne poprawki i niespójności. Design system przenosi decyzje wizualne z poziomu pojedynczego ekranu na poziom zasad, komponentów i tokenów. Dzięki temu projekt rośnie przewidywalnie, a zespół nie walczy o każdy piksel. Najważniejsze jest połączenie: biblioteka komponentów (w narzędziu graficznym), język decyzji (tokeny) oraz jasno zdefiniowany eksport do kodu.

Trzy warstwy porządku: zasady, komponenty, tokeny

Zasady to reguły wizualne: siatki, rytm, typografia, kolor, ruch, obraz. Komponenty to gotowe klocki interfejsu (przycisk, karta, baner, pasek nawigacji) w wariantach stanu i rozmiaru. Tokeny to najmniejsze, nazwane decyzje wizualne (np. odstęp 8 px, kolor „brand/primary/600”, promień 12 px), które komponenty zużywają jak „paliwo”. Jeśli zmienisz token, zmienią się wszystkie komponenty, które go używają — bez ręcznego przepinania stu plików.

Siatka i rytm: jak ustawić fundamenty, żeby UI „oddychał”

Najprostszy i najskuteczniejszy zabieg to przyjęcie jednego modułu bazowego (np. 8 px) i jego wielokrotności dla odstępów, rozmiarów ikon, promieni i wysokości elementów. Siatka kolumn (np. 12 na desktopie, 4–6 na mobile) powinna uwzględniać marginesy bezpieczne oraz wyrównania do typografii. Dzięki modulowi 8 px rozwiążesz większość konfliktów przestrzennych: marginesy „zaskakują”, elementy nie pływają, a projekt wygląda spójnie nawet po rozbudowie.

Typografia: style, skale i kontrasty

Zdefiniuj skalę tekstu w 6–8 poziomach (np. display, h1–h4, body, caption) oraz pary rozmiar/interlinia dopasowane do gęstości treści. Jeden krój (lub sensowna para) wystarczy w większości przypadków. Dla treści akapitowych trzymaj długość wiersza 60–75 znaków i kontrast co najmniej odpowiadający standardom dostępności. Z punktu widzenia front-endu istotne, aby style miały stabilne nazwy (np. text/body/md), a nie „Body copy nowy 3”.

Kolor: paleta funkcjonalna, nie tylko „ładne barwy”

Podziel kolory na semantyczne (primary, secondary, success, warning, error, info) oraz neutralne (odcienie tła i tekstu). Każdej rodzinie przypisz stopnie jasności (np. 50–900) oraz pary tekst/tło zapewniające czytelność w jasnym i ciemnym motywie. W makiecie używaj nazw semantycznych, a nie numerów HEX — to pozwala później podmienić brand bez przepisywania ekranów.

Komponenty: warianty, stany, rozmiary

Każdy komponent powinien mieć z góry ustalone trzy wymiary zmienności: stan (default, hover, focus, active, disabled, loading), wariant (np. solid, outline, ghost, tonal) i rozmiar (sm, md, lg). Zamiast mnożyć „nowe typy”, trzymaj tę samą siatkę decyzji — ułatwia to zarówno projektowanie, jak i kod. W kartach i listach zdefiniuj „sloty” (media, tytuł, opis, akcje), żeby uniknąć dziesiątek podobnych wynalazków.

Tokeny: język decyzji, który rozumie i Figma, i front-end

Tokeny to nazwy dla kolorów, odstępów, promieni, cieni, typografii i efektów. Dobrze nazwany token zdradza przeznaczenie i poziom: color.text.primary, space.200, radius.md, shadow.lg. Ustal konwencję kropkową (grupa.poddomena.poziom) i trzymaj spójność. Tokeny powiąż z komponentami — w grafice nie wpisuj wartości „na sztywno”, tylko przypinaj style oparte na tokenach. Dzięki temu zmiany „lecą” przez system jak fala, a nie jak ręczna korekta.

Tryb jasny i ciemny: jeden system, dwa schematy

Nie projektuj dwóch oddzielnych światów. Ustal mapę semantyczną (np. surface/primary, text/secondary, border/muted) i zdefiniuj dla niej dwa zestawy wartości: light i dark. Komponenty nie muszą wiedzieć, jakie są konkretne HEX-y — odwołują się do tokenów semantycznych, a te „pod spodem” zmieniają wartości w zależności od motywu. W grafice utrzymuj oba motywy obok siebie i testuj kontrast dla kluczowych par.

Ruch i mikrointerakcje: animacje jako zasady

Ruch nie jest dekoracją — komunikuje stan i hierarchię. Zdefiniuj prędkości i krzywe (np. ease-in dla wejścia, ease-out dla wyjścia, ease-in-out dla przejść), a także czasy (150–300 ms dla małych elementów, 300–500 ms dla większych). W specyfikacji komponentu pokaż: „skąd → dokąd”, „co się zmienia” (przezroczystość, przesunięcie, skala) oraz „jakie są stany pośrednie”. Unikaj ruchu o dużej amplitudzie w elementach informacyjnych — szybko męczy i obniża czytelność.

Biblioteka w narzędziu graficznym: wersjonowanie i prawa do zmian

Utrzymuj jedną „prawdę” o komponentach: bibliotekę główną z wersjonowaniem (v1, v1.1 itd.) i changelogiem. Zablokuj edycje komponentów bezpośrednio w projektach produktowych — wprowadzaj zmiany w źródłowej bibliotece i publikuj nową wersję. Makiety konsumują komponenty przez instance swap; od razu widać, które ekrany są na starych komponentach. Dla prototypów eksperymentalnych utrzymuj osobny plik sandbox, ale nie mieszaj go z produkcyjną biblioteką.

Specyfikacja komponentów: co trzeba opisać, żeby nie było pytań

Dobra karta komponentu zawiera: opis zastosowań (kiedy tak/nie), warianty, rozmiary, stany, ograniczenia treści (np. maksymalna liczba znaków), do/don’t z obrazkami, zasady dostępności (kontrast, hit area min. 24×24 px, zachowanie fokusu), mapę tokenów, przykładowe kompozycje (np. grupa przycisków, pasek akcji). Na końcu link do implementacji w repo front-endu lub pakietu UI.

Handoff do front-endu: eksport tokenów i zgodność nazw

Najczęstszy ból to rozjechane nazwy i wartości. Ustal wspólny source of truth dla tokenów (pliki JSON) i automatyczny eksport do różnych platform (web, iOS, Android). Nazwy w grafice = nazwy w kodzie. Dzięki temu zmiana color.brand.primary w jednym miejscu trafia do CSS zmiennych, SwiftUI i Jetpack Compose bez ręcznego przepisywania. W komponentach front-endowych używaj właśnie tych tokenów — nie wpisuj wartości na sztywno.

Ikony i ilustracje: siatka, styl i warianty

Ikony projektuj w spójnej siatce (np. 24×24), z tym samym kątem narożników i grubością linii. Przygotuj warianty „filled” i „outlined” tylko tam, gdzie to faktycznie buduje hierarchię. Unikaj unikalnych ikon dla pojedynczych przypadków — lepiej użyć metonimii z istniejącego zestawu. Ilustracje trzymaj w jednym stylu (kolor, grubość konturu, poziom szczegółowości), z wersjami responsywnymi (hero, moduł, miniatura). Wersje tła dla light/dark projektuj jako osobne zasoby, nie „przyciemniaj” na siłę.

Obrazy, zdjęcia i kadrowanie: zasady, które kończą spory

Zdefiniuj proporcje (1:1, 4:3, 16:9), minimalne rozdzielczości, strefy bezpieczeństwa pod tekst i znaki wodne oraz reguły kadrowania dla różnych modułów (np. karta produktu vs. hero). Ustal profil edycyjny (sRGB), bazowe wyostrzenie i kompresję. Dzięki temu marketing i produkt „mówią tym samym językiem” i nie powstają dziesiątki sprzecznych wersji tego samego zdjęcia.

Dostępność w design systemie: decyzje „na stałe”

Dostępność nie jest dodatkiem po publikacji. Wpisz do systemu: minimalne kontrasty, minimalny rozmiar hit area, zachowanie fokusu, widoczność stanów i zasady błędów w formularzach. Dodaj gotowe wzorce (komunikaty błędów, wskazówki, etykiety, aria-atrybuty w specyfikacji). Im bardziej „wbetonujesz” te decyzje w komponenty i tokeny, tym mniej poprawek po wdrożeniu.

Proces utrzymania: jak nie „zajechać” systemu po pół roku

Wyznacz opiekuna (design lead) i radę zmian (designer + dev + PM). Każda zmiana ma ticket, opis potrzeby, propozycję i wpływ na istniejące ekrany. Co kwartał przegląd komponentów: które są rzadko używane, co się dubluje, co trzeba uprościć. Zmiany publikuj w wersjach i komunikuj zespołowi (notatka, krótkie wideo, przykłady zastosowań). Dla dużych modyfikacji przygotuj „most” kompatybilności (np. stary i nowy przycisk przez dwa sprinty).

Case: szybka standaryzacja w małej firmie (30 dni)

Tydzień 1: porządek w kolorach i typografii: scala paletę do semantycznej, ustal 6–8 stylów tekstu, wdroż 8-pikselowy rytm. Wydziel 10 najczęściej używanych komponentów i opisz ich warianty, rozmiary, stany.

Tydzień 2: wprowadź tokeny dla kolorów, odstępów, promieni, cieni, typografii. Podłącz tokeny do komponentów w bibliotece i usuń „twarde” wartości. Zdefiniuj dwa motywy (light/dark) na mapie semantycznej.

Tydzień 3: przygotuj handoff: eksport tokenów do JSON i zmiennych CSS, mapa nazw 1:1 z repo UI. Opisz specyfikacje 10 komponentów (stany, a11y, ograniczenia treści). Ustal proces wersjonowania i changelog.

Tydzień 4: refaktor makiet produktowych: podmień instancje na nowe komponenty, usuń duplikaty. Zrób przegląd z devami, zaplanuj „dług” (co poprawić w kodzie). Opublikuj v1.0 i wyznacz rytm przeglądów co sprint.

Najczęstsze błędy i szybkie poprawki

Tokeny bez semantyki. Same wartości (np. „blue-500”) nie pomagają w redesignie. Nazwij funkcję: color.text.primary.

Komponenty „na sztywno”. Brak wariantów i stanów prowadzi do ręcznych przeróbek. Dodaj axis: wariant/rozmiar/stany.

Mnożenie ikon i stylów. Ustal siatkę, grubości, styl i bibliotekę; wyrzuć wyjątkowe wynalazki.

Brak mostu z kodem. Ręczne przepisywanie nazw powoduje dryf. Eksport tokenów + zgodność nazw rozwiązuje 80% kłopotów.

Dostępność „po fakcie”. Wbij a11y w komponenty (kontrast, fokus, hit area), a nie w check-listę na końcu.

Podsumowanie

Dobry design system łączy zasady (siatka, typografia, kolor), komponenty (warianty, stany, rozmiary) i tokeny (nazwane decyzje) w jeden, wspólny język dla grafików i programistów. Gdy nazwy są spójne, a wartości płyną z tokenów, zmiany nie bolą: redesign koloru nie oznacza przebudowy makiet, a tryb ciemny nie wymaga malowania każdego ekranu od nowa. Zacznij od 10 kluczowych komponentów, semantycznej palety i eksportu tokenów; reszta to konsekwencja i wersjonowanie.

Źródła

  • https://m3.material.io – Material Design 3: zasady siatek, typografii, kolorów, stanów i komponentów.
  • https://developer.apple.com/design/human-interface-guidelines – Apple Human Interface Guidelines: wzorce i komponenty dla iOS/macOS (typografia, ruch, dostępność).
  • https://learn.microsoft.com/fluent – Microsoft Fluent: system projektowy i biblioteki UI (zasady, tokeny, komponenty).
  • https://tr.designtokens.org – Design Tokens Community Group: specyfikacja i dobre praktyki definiowania i wymiany tokenów.
  • https://www.figma.com/best-practices/library-design/ – Figma: najlepsze praktyki budowy bibliotek komponentów, wariantów i wersjonowania.
Zgłoś swój pomysł na artykuł

Więcej w tym dziale Zobacz wszystkie