Projektowanie UI

Jak budować gradienty, które nie wyglądają błotniście

Zespół colorPaletteFinder6 min czytania

Gradienty przeszły z tandetnych w gustowne i z powrotem tyle razy, że projektanci zaczęli się ich bać. Ale dobry gradient to jeden z najtańszych sposobów, by płaski interfejs sprawiał wrażenie głębi i światła. Problem w tym, że większość gradientów zawodzi dokładnie w jednym miejscu — w środku — a ta porażka jest tak powszechna, że nauczyła całe pokolenie projektantów unikania tego narzędzia w ogóle. Gdy zrozumiesz, dlaczego punkt środkowy robi się błotnisty, możesz to świadomie naprawić, a gradienty stają się niezawodną częścią zestawu, a nie hazardem. Oto model myślowy i ruchy, których faktycznie używam.

Gradient to ścieżka, a nie para

Błąd ukryty w każdym błotnistym gradiencie to myślenie o nim jako o dwóch kolorach. To nie tak. To ścieżka między dwoma kolorami, a pytaniem decydującym o tym, czy wygląda dobrze, jest: jaką trasą podąża przejście, by dostać się z A do B?

Gdy zapiszesz zwykły gradient CSS jak linear-gradient(#3B82F6, #F59E0B) — błękit do bursztynu — przeglądarka domyślnie interpoluje w sRGB, idąc po linii prostej przez przestrzeń barw. Wyobraź sobie koło barw widziane z góry. Błękit leży po jednej stronie, bursztyn z grubsza naprzeciw. Prosta linia między nimi nie biegnie po kolorowym obrzeżu; przecina bezpośrednio przez odbarwiony szary środek. Więc punkt środkowy tego gradientu to smutny, wyblakły szarawy ton. To jest to błoto. To nie błąd renderowania — to geometria. Najkrótsza ścieżka między dwoma przeciwnymi odcieniami biegnie przez szarość.

To jedno spostrzeżenie przekształca wszystko. Jeśli błotnistość bierze się ze ścieżki, to jej naprawa oznacza kontrolowanie ścieżki. Są trzy główne dźwignie: wybierz kolory, których prosta ścieżka jest już dobra, przekieruj ścieżkę pośrednim punktem, albo zmień przestrzeń barw tak, by domyślna ścieżka wyginała się dookoła koła zamiast przez nie.

Dźwignia pierwsza: wybierz kolory, które są dla siebie życzliwe

Najłatwiejszy czysty gradient jest między dwoma kolorami bliskimi pod względem odcienia — parą analogiczną. Zmieszaj #3B82F6 (błękit) z #6366F1 (indygo`), a ścieżka po linii prostej ledwo opuszcza sąsiedztwo błękitno-fioletowe, więc nie ma szarej strefy, w którą można by wpaść. Wynik jest gładki i bogaty automatycznie.

Dlatego tak wiele gradientów sprawiających wrażenie premium jest subtelnych: błękit do fioletu, turkus do zieleni, magenta do czerwono-pomarańczowego. Są analogiczne, często w obrębie 30–60 stopni odcienia, i bardziej zmieniają jasność niż odcień. Gradient, który głównie zmienia jasność, utrzymując odcień niemal stały, niemal niemożliwe jest zrobić błotnistym. Jeśli chcesz bezpiecznego punktu wyjścia, najpierw zbuduj zestaw monochromatyczny lub analogiczny, a potem mieszaj w jego obrębie.

Wniosek: gradienty dopełniające (kolory oddalone o 180 stopni) są najtrudniejsze do utrzymania w czystości, właśnie dlatego, że ich prosta ścieżka biegnie wprost przez środek. Da się je zrobić — ale potrzebują jednej z dwóch kolejnych dźwigni.

Dźwignia druga: dodaj punkt, by pokierować ścieżką

Gdy naprawdę chcesz dwóch odległych kolorów — błękitu i ciepłego pomarańczu, powiedzmy, bo oba są firmowe — nie pozwól przeglądarce wybierać punktu środkowego. Wybierz go sam za pomocą trzeciego punktu.

Zamiast linear-gradient(#3B82F6, #F59E0B), spróbuj poprowadzić przez odcień, który je łączy: linear-gradient(#3B82F6, #C084FC, #F59E0B). Ten fioletowy środkowy punkt ciągnie ścieżkę dookoła koła, przez fiolet i róż, zamiast przez szarość. Teraz przejście pozostaje nasycone na całej długości. Ręcznie narysowałeś kolorową trasę, której prosta linia odmówiła pokonania.

Wybór koloru-mostu to część rzemieślnicza. Zapytaj, w którą stronę dookoła koła chcesz podążyć — błękit do bursztynu może iść przez fiolet/magentę (trasa ciepła) albo przez zieleń/turkus (trasa chłodna), a one sprawiają zupełnie inne wrażenie. Trasa ciepła odczytuje się jak zachód słońca; trasa chłodna jak tropik. Wybieraj świadomie. Kolory-mosty możesz szybko przesłuchać, generując paletę w generatorze palety kolorów i wstawiając kandydujące odcienie między punkty końcowe.

Trzymaj się jednego, może dwóch pośrednich punktów. Każdy dodatkowy punkt to kolejne miejsce, w którym gradient może wytworzyć widoczny szew lub pasmo. Więcej punktów to nie więcej luksusu — to powściągliwość odczytuje się jako luksus.

Dźwignia trzecia: interpoluj w lepszej przestrzeni barw

Nowoczesna poprawka, i coraz częściej moja domyślna, to zmiana przestrzeni, w której odbywa się mieszanie. CSS pozwala teraz określić przestrzeń barw interpolacji wprost: linear-gradient(in oklch, #3B82F6, #F59E0B).

OKLCH (i jego kuzyn LCH) jest percepcyjnie jednorodny — równe kroki liczbowe wyglądają dla oka jak równe kroki wizualne — a co kluczowe, gdy poprosisz go o interpolację odcienia, podróżuje dookoła koła odcieni, a nie przez kartezjański środek. Praktyczny efekt jest taki, że ten sam dwukolorowy gradient błękit–bursztyn przestaje zanurzać się w szarość, a zamiast tego automatycznie przeciąga się przez żywe pośrednie odcienie, bez ręcznego punktu. Dokumentacja MDN o interpolacji kolorów gradientu omawia składnię oraz opcje shorter hue / longer hue, które pozwalają kontrolować, w którym kierunku dookoła koła biegnie przejście.

Kilka uczciwych zastrzeżeń. Wsparcie przeglądarek dla in oklch jest dobre w aktualnych przeglądarkach, ale nie powszechne, więc dostarcz standardowy wariant zapasowy sRGB (background: linear-gradient(#3B82F6, #F59E0B); przed linią OKLCH). A OKLCH może czasami wytworzyć zbyt żywy punkt środkowy dla subtelnych teł — przy ledwo widocznej powłoce hero zwykłe sRGB między bliskimi kolorami nadal jest w porządku. Sięgaj po OKLCH, gdy punkty końcowe są odległe i chcesz, by pozostały nasycone.

Kąty, typy i gdzie należą gradienty

Ścieżka to trudna część; reszta to gust, ale są konwencje warte poznania.

Dla głębi trzymaj dwa kolory blisko siebie pod względem jasności i odcienia — subtelny gradient (#1E293B do #0F172A) na ciemnej powierzchni dodaje bogactwa, którego żadne płaskie wypełnienie nie zapewni. Dla efektu pozwól gradientowi być bohaterem i daj mu przestrzeń.

Nie zapomnij o tekście

Gradienty i tekst mają napiętą relację. Kontrast musi się utrzymać na całej rozpiętości gradientu, a nie tylko tam, gdzie akurat upuściłeś nagłówek. Tytuł, który przechodzi kontrast WCAG nad jasną górą gradientu, może po cichu zawieść nad ciemniejszym dołem. Testuj najgorszy punkt, opieraj się na współczynnikach kontrastu WCAG (4,5:1 dla tekstu podstawowego, według wytycznych W3C), a w razie wątpliwości umieść za tekstem półprzezroczystą jednolitą nakładkę, by jego tło było przewidywalne. Albo po prostu trzymaj gradienty w strefach dekoracyjnych i umieszczaj tekst na jednolitych wypełnieniach.

Wersja krótka

Przestań myśleć o gradiencie jako o dwóch kolorach, a zacznij myśleć o nim jak o linii między nimi. Błotniste środki biorą się z prostej ścieżki przez szarość; naprawiasz je, wybierając życzliwsze kolory, kierując pośrednim punktem albo interpolując w OKLCH, by ścieżka wyginała się dookoła obrzeża. Opanuj to, a gradienty przestaną być ryzykiem i staną się jednym z najefektywniejszych sposobów dodawania światła, głębi i osobowości do płaskiej pracy. Wyciągnij dwa kolory z generatora palety kolorów, wstaw je do linear-gradient(in oklch, …) i obserwuj, jak przejście, które zrobiłoby się szare, pozostaje żywe na całej długości.

Najczęściej zadawane pytania

Dlaczego środek mojego gradientu wygląda szaro lub błotniście?

Gdy mieszasz dwa kolory w domyślnej przestrzeni sRGB, interpolacja przecina koło barw w linii prostej, zamiast biec dookoła niego. Jeśli Twoje dwa kolory są odległe pod względem odcienia — powiedzmy błękit i żółć — ta prosta linia przechodzi przez niskonasycony szary środek, więc punkt środkowy traci nasycenie i wygląda błotniście. Rozwiązaniem jest albo wybór kolorów bliższych pod względem odcienia, dodanie pośredniego punktu koloru, by poprowadzić przejście dookoła koła, albo użycie przestrzeni barw i metody interpolacji odcienia, która biegnie po obrzeżu, a nie przez środek.

Jakiej przestrzeni barw używać do gradientów CSS?

W większości nowoczesnych prac interpolacja w OKLCH lub LCH daje zauważalnie gładsze, bardziej równomierne gradienty niż domyślne sRGB, bo te przestrzenie są percepcyjnie jednorodne — równe kroki liczbowe wyglądają jak równe kroki wizualne. Włączasz je składnią taką jak 'linear-gradient(in oklch, #3B82F6, #F59E0B)'. Domyślne sRGB jest w porządku przy przejściach między bliskimi, podobnymi kolorami, ale przy żywych dwukolorowych gradientach OKLCH unika matowego punktu środkowego i martwych stref. Zawsze sprawdzaj wsparcie przeglądarek i dostarcz standardowy wariant zapasowy dla starszych przeglądarek.

Ile punktów koloru powinien mieć gradient?

Dwa punkty wystarczą do prostego, subtelnego przejścia i to właśnie tam żyje większość czystych gradientów UI. Dodaj trzeci, pośredni punkt, gdy Twoje dwa punkty końcowe są odległe pod względem odcienia, a automatyczny punkt środkowy wygląda źle — środkowy punkt pozwala poprowadzić ścieżkę przez korzystny kolor, zamiast przez szarość. Powyżej trzech lub czterech punktów zwykle tworzysz pasmowanie i szum wizualny zamiast bogactwa. W przypadku teł mniej punktów z łagodnym przejściem niemal zawsze wygląda bardziej premium niż ruchliwa tęcza.

Pod jakim kątem powinien być gradient liniowy?

Nie ma jednego poprawnego kąta, ale kilka konwencji odczytuje się jako dopracowane: gradient od góry do dołu (180deg) sprawia wrażenie naturalnego oświetlenia z góry, podczas gdy przekątna około 135deg dodaje poczucia kierunku i energii, nie będąc chaotyczną. Subtelne pionowe gradienty świetnie sprawdzają się przy przyciskach i kartach, bo naśladują sposób, w jaki pada światło. Strome lub nietypowe kąty przyciągają uwagę do samego gradientu, czego chcesz tylko wtedy, gdy gradient jest elementem-bohaterem, a nie cichym tłem.

Czy gradienty są problemem dostępności dla tekstu?

Mogą być, bo kontrast tekstu musi się utrzymać na całym obszarze, który tekst pokrywa, a nie tylko w jednym punkcie. Nagłówek na gradiencie biegnącym od jasnego do ciemnego może przejść kontrast u góry i nie przejść u dołu. Bezpieczne podejścia to utrzymywanie tekstu wyłącznie nad obszarem gradientu, gdzie kontrast pozostaje powyżej progu WCAG, dodanie pełnej lub półprzezroczystej nakładki za tekstem, albo ograniczenie gradientów do nietekstowych, dekoracyjnych obszarów. Zawsze testuj najgorszy punkt gradientu, a nie średnią.

Chcesz poeksperymentować z kolorami?

Wypróbuj nasz darmowy generator palet kolorów, aby znaleźć idealną harmonię — z wbudowanym sprawdzaniem kontrastu WCAG.

Otwórz generator