艣roda, 25 maja 2022

馃寛馃寛Zarz膮dzanie kolorami w CSS馃寛馃寛

Co projekt, to inne metody zarz膮dzania kolorami w CSS. Najcz臋艣ciej regu艂 albo nie ma, albo s膮 zbyt 艣cis艂e, co powoduje sporo problem贸w. W poni偶szym wpisie postaram si臋 przedstawi膰 prosty przyk艂ad dotycz膮cy tego, jak mo偶na 艂adnie poradzi膰 sobie z kolorami w aplikacji.

Prosty przyk艂ad

Wyobra藕 sobie 偶e zaczynasz niewielki projekt i dodajesz do niego kilka styl贸w. Z czasem widzisz, 偶e pojawiaj膮 si臋 niesp贸jno艣ci je艣li chodzi o kolory. Przyk艂adowo 


Mamy tu ju偶 3 rozbie偶no艣ci. Kolor mo偶na zadeklarowa膰 w hex za pomoc膮 trzech lub wi臋cej znak贸w, w klasie item dodatkowo zapisujemy background-color po prostu nazw膮 koloru, co jest odradzane. Dodatkowo, kolory mo偶na zapisywa膰 nie tylko w warto艣ciach hexadecymalnych, ale tak偶e w HSL, HSV i RGB. Warto艣ci kolor贸w u偶yte w przyk艂adzie s膮 hipotetyczne :).

Problem pojawi si臋 gdy b臋dziesz mia艂 coraz wi臋cej kodu i ka偶dy kolor dla ka偶dego elementu b臋dzie okre艣lany osobno za pomoc膮 r贸偶nych warto艣ci.

Dobrym wyj艣ciem b臋dzie wydzielenie kodu dotycz膮cego kolor贸w do custom properties.

Warto usp贸jni膰 spos贸b okre艣lania kolor贸w.
Na ten moment nie potrzebuj臋 przezroczysto艣ci, dlatego ustawiam kolory jako hex zawieraj膮cy zawsze 6 znak贸w. Kolory mamy teraz zgromadzone w jednym miejscu i mo偶emy ich reu偶ywa膰.

Pojawia si臋 pytanie - jak bardzo rozdrabnia膰 si臋 w nazewnictwie kolor贸w. Przyk艂adowo, w aplikacji na pewno b臋dziesz potrzebowa艂 koloru do okre艣lania tego jak ma prezentowa膰 si臋 tekst. Spotka艂em si臋 z rozwi膮zaniem polegaj膮cym na okre艣laniu osobno koloru dla tabeli, sekcji czy nag艂贸wk贸w. Albo z osobnym stylowaniem ka偶dej gwiazdki oznaczaj膮cej wymagalno艣膰, niezale偶nie od tego w kt贸rym miejscu si臋 znajdowa艂a.

Kolor贸w powstaje wtedy ca艂e multum i w sekcji zmiennych pojawia si臋 mn贸stwo duplikacji. Moim zdaniem nie ma to zbyt du偶ego sensu. Je艣li elementy maj膮 by膰 ostylowane sp贸jnie, to wystarczy im jeden wsp贸lny kolor. 

Warto zastanowi膰 si臋 nad kwesti膮 nazewnictwa kolor贸w. Mo偶na nazywa膰 je semantycznie i wtedy nazwa odpowiada za to, co robi dany kolor. Tak zrobi艂em w przedstawionym kodzie, okre艣laj膮c kolor t艂a i kolor czcionki i dziel膮c je na g艂贸wne i podrz臋dne. Drugie podej艣cie to po nazywanie koloru zielonego zielonym itd. 

Id膮c dalej, w nowoczesnej aplikacji prawdopodobnie b臋dziesz mia艂 wyb贸r trybu ciemnego i jasnego. Poniewa偶 mamy kolory wydzielone do jednej "dziedziny", mo偶emy 艂atwo je odwr贸ci膰.


Niekt贸re elementy, jak linki, mog膮 potrzebowa膰 nawet 4 kolor贸w (link, visited, hover, focus) i tyle samo w trybie ciemnym. 
Jeszcze jedn膮 zalet膮 takiego podej艣cia jest bardzo 艂atwa zmiana designu strony, je艣li pojawi膮 si臋 nowe wymagania ze strony klienta. Przy kolorach rozrzuconych po ca艂ej aplikacji, zmiana mo偶e zaj膮膰 mn贸stwo czasu i prawdopodobnie trzeba b臋dzie przejrze膰 ca艂y kod CSS. Gdy kolory mamy w jednym miejscu, to kwestia poprawek tylko dla zmiennych.

Je艣li chcemy u偶ywa膰 wariantu koloru, kt贸ry ju偶 zdefiniowali艣my, dobrym wyborem mo偶e by膰 reu偶ycie istniej膮cego koloru i zmiana go za pomoc膮 filtru - https://developer.mozilla.org/en-US/docs/Web/CSS/filter-function lub funkcji - przyk艂adowo color-mix - https://developer.mozilla.org/en-US/docs/Web/CSS/color_value/color-mix

Linter do CSS oraz na co zwraca膰 uwag臋 przy review

U偶ycie lintera, takiego jak stylelint, umo偶liwi utrzymywanie sp贸jnej koncepcji tak偶e w odniesieniu do css-owych kolor贸w. Przyk艂adowo, mo偶na w nim wy艂膮czy膰 u偶ywanie nazw kolor贸w i wymusi膰 nazewnictwo jako pe艂ny hex. Dzi臋ki temu, p贸藕niejsza analiza kodu b臋dzie 艂atwiejsza. Tego, by kolory deklarowa膰 jedynie w okre艣lonych miejscach linterem nie wymusimy, ale mo偶emy to wychwyci膰 w czasie review.
Podczas review starajmy si臋 unika膰 sytuacji w kt贸rym jaki艣 kolor "wymyka" si臋 z ustalonej konwencji, bo kto艣 robi艂 poprawk臋 na szybko. Przypominam tutaj teorie rozbitych okien - 艂amanie mniej wa偶nych norm w projekcie, powoduje jego degradacj臋. Warto te偶 spisa膰 i udost臋pni膰 programistom regu艂y dotycz膮ce kodu CSS, a podczas review, wymusza膰 ich stosowanie.

Obrazki z kodem wykona艂em za pomoc膮 chalk.ist

Brak komentarzy:

Prze艣lij komentarz