Przewodnik po kolorach CSS w wysokiej rozdzielczości

CSS Color 4 udostępnia w internecie szeroki zakres narzędzi i możliwości związanych z kolorami: więcej kolorów, funkcje manipulacji i lepsze gradienty.

Adam Argyle
Adam Argyle

Od ponad 25 lat sRGB (standardowy czerwony zielony zielony) jest jedyną gałązką gradientów i kolorów CSS, a jej przestrzeń dostępna jest np. w formacie rgb(), hsl() czy szesnastkowym. Jest to najczęstsza gama kolorów na wyświetlaczach, która jest wspólnym mianownikiem. Przyzwyczailiśmy się do określania kolorów w ramach tej gamy.

Najpopularniejsze formaty kolorów według odsetka wystąpień.
https://almanac.httparchive.org/pl/2022/css#colors

W miarę jak wyświetlacze mogą pokazywać szeroki zakres kolorów, CSS potrzebuje sposobu na określanie kolorów z tych szerszych zakresów. Obecne formaty kolorów nie obsługują szerokich zakresów kolorów.

Gdyby CSS nie był aktualizowany, utknąłby w zakresie kolorów z lat 90. i nigdy nie pasował do szerokiego zakresu ofert dostępnych na obrazach i w filmach. Uwięziony, pokazywany tylko 30% kolorów, które widzi ludzkie oko. Dziękujemy CSS Color Level 4 za pomoc w ucieczce z tej pułapki. Autorzy głównie przez Lea Verou i Chrisa Liley.

Od Chrome w wersji 111 obsługiwane są gamy i przestrzenie kolorów CSS Color 4. Teraz przeglądarka Safari obsługuje usługę display-p3 od 2016 r. Usługi porównywania cen obsługują teraz wyświetlacze HD (o wysokiej rozdzielczości), określając kolory z gamy gamut HD, a także przestrzenie kolorów z określonymi specjalizacjami. Z tego przewodnika dowiesz się, jak zacząć korzystać z nowego świata kolorów.

Pokazano serię obrazów przechodzących od szerokiej i wąskiej gamy kolorów, ilustrujących intensywność kolorów i jej efekty.
Wypróbuj tę funkcję

W obsługiwanych przeglądarkach dostępnych jest o 50% więcej kolorów. Wydawało Ci się, że 16 milionów kolorów to tyle. Zaczekaj, aż zobaczysz, ile kolorów może pokazać się w nowych przestrzeniach. Pomyślcie też o gradientach, które pasowały do pasów z powodu zbyt małej ilości bitów.

Oprócz większej ilości kolorów, prawdopodobnie najbardziej żywych kolorów wyświetlacza, nowe przestrzenie kolorów zapewniają wyjątkowe narzędzia i metody tworzenia systemów kolorów i zarządzania nimi. Wcześniej mieliśmy na przykład HSL i kanał „Lightness”, który okazał się najlepszy dla programistów. Teraz w CSS mamy „perceptualną jasność” firmy LCH.

Dwie kolorowe tabele znajdują się obok siebie. Pierwsza tabela przedstawia tęczę HSL o około 10 kolorach, a obok niej znajdują się kolory w skali szarości, które odzwierciedlają ich jasność. Druga tabela przedstawia tęczę LCH, znacznie mniej intensywną, ale obok niej wyświetlane kolory w skali szarości są spójne.
    Pokazuje, że dioda LCH ma zdrową wartość stałej jasności, podczas gdy HSL już nie.
Zobacz podgląd: https://codepen.io/web-dot-dev/pen/poZgXxy

Gradienty i mieszanie są też udoskonalone: obsługa przestrzeni kolorów, opcje interpolacji kolorów i mniej pasków. Poniższy przykład przedstawia niektóre uaktualnienia mieszania. Dwie górne mieszaniny kolorów są w sRGB. Dwie dolne mieszanki kolorów są w Display p3. Wyświetlacz P3 ma bardziej żywe kolory, a mieszaniny dają pełną czerń i biel w środku. Miejsca, w których sRGB wygląda na nieco nienasycone, a miksy pośrodku to niepełne czarne lub białe wyniki.

Dwie główne kombinacje kolorów to sRGB i sRGB. Dwie dolne mieszanki kolorów są widoczne na ekranie p3. Wyświetlacz P3 ma bardziej żywe kolory, a mieszane mieszają się w nim czerń i biel, przy czym sRGB wygląda na nieco wysycone, a mieszane mieszane mieszaniny nie są czarno-białe.
https://codepen.io/web-dot-dev/pen/poZgXQb

W tym przewodniku omówimy, gdzie jest kolor, gdzie się on pojawia oraz jak CSS umożliwi deweloperom stron internetowych zarządzanie kolorem.

Przegląd

Problem z kolorami i internetem polega na tym, że CSS nie jest gotowy w wysokiej rozdzielczości, a wyświetlacze, które większość ludzi ma w kieszeniach, na nogach lub montowanych na ścianach, są gotowe w wysokiej rozdzielczości. Możliwości kolorów wyświetlaczy pojawiły się szybciej niż CSS, ale CSS nadąża za zmianami.

To nie tylko „więcej kolorów”. Po zakończeniu tego artykułu dowiesz się, jak określić więcej kolorów, ulepszyć gradienty oraz wybrać najlepsze przestrzenie i gamy kolorów dla każdego zadania.

Czym jest gama kolorów?

Gama reprezentuje rozmiar czegoś. Wyrażenie „miliony kolorów” to komentarz na temat gamy wyświetlacza lub zakresu kolorów do wyboru. Na ilustracji poniżej porównano 3 gamy kolorów, a im większy rozmiar, tym więcej kolorów.

Gamaty kolorów są porównywane obok siebie jako trójkąty.
  Format sRGB jest najmniejszy, a rec2020 największy.

Gama kolorów też może mieć nazwę. Może to być np. różnica między piłką nożną a piłkarzykiem czy filiżanką kawy z dużą aurą i dużym rozmiarem. Nazwa rozmiaru ułatwia użytkownikom komunikację. Znajomość nazw gamy kolorów ułatwia komunikowanie się i szybkie interpretowanie różnych kolorów.

W tym artykule omówimy 7 nowych zakresów, z których każdy jest szerszy niż sRGB, i opisujemy ich różne funkcje, aby ułatwić Ci wybór:

Gama wzrokowa

Gama kolorów jest często porównywana z gamyą wzrokową człowieka, która według nas jest w stanie dostrzec całe oko. HVS jest często przedstawiana za pomocą schematu chromatyczności:

Kształt buta w kształcie konia jest wypełniony intensywnym gradientem z pustym trójkątem pośrodku.
Źródło: Wikipedia

Najbardziej zewnętrzny kształt jest widoczny dla ludzi, a wewnętrzny trójkąt to zakres funkcji rgb(), czyli przestrzeń kolorów sRGB.

Tak jak widać powyżej trójkąty, porównamy ich rozmiary. Jest to sposób komunikacji i porównywania gamy kolorów.

Czym jest przestrzeń kolorów?

Przestrzenie kolorów to układy gamy, które tworzą kształt oraz sposób dostępu do kolorów. Wiele z nich to proste kształty 3D, takie jak sześciany lub walce. Ta aranżacja kolorów określa, które kolory są obok siebie, oraz sposób, w jaki działa dostęp do kolorów i ich interpolacja.

RGB to prostokątna przestrzeń kolorów, w której dostęp do kolorów można uzyskać po określeniu współrzędnych na 3 osiach. HSL to walcowa przestrzeń kolorów, w której kolory są dostępne na podstawie kąta odcienia i współrzędnych na 2 osiach

Wyświetlana jest obok siebie otwarta kostka RGB i przecięcia w walce HSL, aby pokazać, jak kolory zostały ułożone w kształt w każdym miejscu.
https://en.wikipedia.org/wiki/HSL_and_HSV

Specyfikacja poziomu 4 wprowadza 12 nowych przestrzeni kolorów, które pozwalają wyszukiwać kolory spośród 7 udostępnionych wcześniej:

Są one uzupełnieniem 4 przestrzeni kolorów, które były wcześniej dostępne:

Podsumowanie Gama kolorów i przestrzeni kolorów

Przestrzeń barw to przyporządkowanie kolorów, w ramach której gama kolorów to zakres kolorów. Gama kolorów to zbiór cząstek i przestrzeń kolorów jako butelka do przechowywania tego zakresu cząstek.

Oto interaktywna wizualizacja, której autorem jest Alexey Ardov, która przedstawia przestrzenie kolorów. Wskaż, przeciągnij i powiększ widok w tej wersji demonstracyjnej. Zmień przestrzeń kolorów, aby zobaczyć wizualizację innych przestrzeni.

  • Używaj gatunków kolorów, aby dyskutować o różnych kolorach, np. niskim lub wąskim zakresie w porównaniu z wysokim lub szerokim.
  • Używaj przestrzeni kolorów, aby mówić o układach kolorów, składni stosowanej do określania koloru, manipulowaniu kolorem i interpolacji koloru.
Kostka wypełniona wieloma kolorowymi kropkami.
Powyżej widać gamę cząstek sRGB, która mieści się w przestrzeni kolorów sześcianu RGB Źródło obrazu

Jak uzyskać dostęp do większej liczby kolorów, nowych spacji i wyników debugowania

Kolor 4: szereg nowych funkcji i narzędzi CSS oraz kolorów. Najpierw przypomnijmy, gdzie były kolory przed wprowadzeniem nowych funkcji. Następnie omówienie nowych przestrzeni kolorów, składni i narzędzi.

Następujący program Codepen pokazuje razem wszystkie nowe i stare składni kolorów:

Przegląd klasycznych przestrzeni kolorów

Od początku XXI wieku można używać tych właściwości CSS, które akceptują kolor jako wartość: rgb()rgba()hotpinkcurrentColor Około 2010 roku, w zależności od tego, jakiej przeglądarki używasz, CSS może używać kolorów hsl(). Następnie w 2017 r. pojawiła się funkcja szesnastkowa z alfa. Dopiero niedawno usługa hwb() zaczęła obsługiwać przeglądarki.

Wszystkie te klasyczne przestrzenie kolorów odwołują się do kolorów w ramach tej samej gamy, czyli sRGB.

Szesnastkowy

Obsługa przeglądarek

  • 1
  • 12
  • 1
  • 1

Źródło

Wartość szesnastkowa kolorów określa R, G, B i A przy użyciu liczb szesnastkowych. Poniższe przykłady kodu ilustrują wszystkie sposoby, w jakie ta składnia może określać kolor czerwony, zielony i niebieski oraz przezroczystość.

.valid-css-hex-colors {
  /* classic */
  --3-digits: #49b;
  --6-digits: #4499bb;

  /* hex with opacity */
  --4-digits-opaque: #f9bf;
  --8-digits-opaque: #ff99bbff;
  --4-digits-with-opacity: #49b8;
  --8-digits-with-opacity: #4499bb88;
}

RGB,

Obsługa przeglądarek

  • 1
  • 12
  • 1
  • 1

Źródło

Przestrzeń kolorów RGB obejmuje bezpośredni dostęp do kanałów czerwonego, zielonego i niebieskiego. Możesz podać wartość z zakresu od 0 do 255 lub procentowo od 0 do 100. Taka składnia była dostępna, zanim w specyfikacjach pojawiła się normalizacja składni, dlatego po prostu stosują się do niej przecinki i bez przecinków. Przecinki nie są już wymagane.

.valid-css-rgb-colors {
  --classic: rgb(64, 149, 191);
  --modern: rgb(64 149 191);
  --percents: rgb(25% 58% 75%);

  --classic-with-opacity-percent: rgba(64, 149, 191, 50%);
  --classic-with-opacity-decimal: rgba(64, 149, 191, .5);

  --modern-with-opacity-percent: rgb(64 149 191 / 50%);
  --modern-with-opacity-decimal: rgb(64 149 191 / .5);

  --percents-with-opacity-percent: rgb(25% 58% 75% / 50%);
  --percents-with-opacity-decimal: rgb(25% 58% 75% / 50%);

  --empty-channels: rgb(none none none);
}

HSL,

Obsługa przeglądarek

  • 1
  • 12
  • 1
  • 3.1

Źródło

HSL (nasycenie i jasność barw) to jedna z pierwszych przestrzeni kolorów, która pozwala lepiej zrozumieć ludzki język i komunikację. Zapewnia wszystkie kolory z gamy sRGB, nie wymagając przy tym mózgu, aby oddziaływać na czerwony, zielony i niebieski. Podobnie jak w przypadku RGB, pierwotnie definicja również miała w składni przecinki, ale teraz nie są one już wymagane.

.valid-css-hsl-colors {
  --classic: hsl(200deg, 50%, 50%);
  --modern: hsl(200 50% 50%);

  --classic-with-opacity-percent: hsla(200deg, 50%, 50%, 50%);
  --classic-with-opacity-decimal: hsla(200deg, 50%, 50%, .5);

  --modern-with-opacity-percent: hsl(200 50% 50% / 50%);
  --modern-with-opacity-decimal: hsl(200 50% 50% / .5);

  /* hueless and no saturation */
  --empty-channels-white: hsl(none none 100%);
  --empty-channels-black: hsl(none none 0%);
}

HWB

Obsługa przeglądarek

  • 101
  • 101
  • 96
  • 15

Źródło

Kolejna przestrzeń kolorów sRGB ukierunkowana na to, jak ludzie opisują kolor, to HWB (odcień, biel, czerń). Autorzy mogą wybrać odcień i zmieszać ze sobą biel lub czerń, aby znaleźć odpowiedni kolor.

.valid-css-hwb-colors {
  --modern: hwb(200deg 25% 25%);
  --modern2: hwb(200 25% 25%);

  --modern-with-opacity-percent: hwb(200 25% 25% / 50%);
  --modern-with-opacity-decimal: hwb(200 25% 25% / .5);

  /* hueless and no saturation */
  --empty-channels-white: hwb(none 100% none);
  --empty-channels-black: hwb(none none 100%);
}

Poznaj nowe przestrzenie kolorów w internecie

Poniższe przestrzenie kolorów dają dostęp do większej gamy kolorów niż sRGB. Przestrzeń kolorów wyświetlacza p3 oferuje prawie dwa razy więcej kolorów niż RGB, podczas gdy w rec2020 jest ich prawie dwa razy więcej niż w standardzie P3. Tuż sporo kolorów!

5 ułożonych w stos trójkątów o różnych kolorach, które pokazują zależności i rozmiar każdej z nowych przestrzeni kolorów.

Funkcja color()

Obsługa przeglądarek

  • 111
  • 111
  • 113
  • 15

Źródło

Nowej funkcji color() można używać w przypadku dowolnej przestrzeni kolorów, która określa kolory za pomocą kanałów R, G i B. color() najpierw przyjmuje parametr przestrzeni kolorów, a następnie serię wartości kanałów dla RGB i opcjonalnie część alfa.

Wiele nowych przestrzeni kolorów korzysta z tej funkcji, ponieważ funkcje specjalistyczne, takie jak rgb, srgb, hsl, hwb itp., stają się coraz dłuższe, dzięki czemu przestrzeń kolorów może być parametrem.

Zalety

  • Znormalizowana przestrzeń dostępu do przestrzeni kolorów korzystających z kanałów RGB.
  • Możliwość skalowania w górę do dowolnej przestrzeni kolorów RGB o szerokim zakresie.

Wady

  • Nie działa z HSL, HWB, LCH, okLCH ani okLAB
.valid-css-color-function-colors {
  --srgb: color(srgb 1 1 1);
  --srgb-linear: color(srgb-linear 100% 100% 100% / 50%);
  --display-p3: color(display-p3 1 1 1);
  --rec2020: color(rec2020 0 0 0);
  --a98-rgb: color(a98-rgb 1 1 1 / 25%);
  --prophoto: color(prophoto-rgb 0% 0% 0%);
  --xyz: color(xyz 1 1 1);
}

sRGB za pomocą funkcji color()

Trójkąt sRGB jest jedynym, który jest w pełni nieprzezroczysty, ponieważ pozwala zwizualizować wielkość gamy.

Ta przestrzeń kolorów oferuje te same funkcje co rgb(). Dodatkowo zawiera on ułamki dziesiętne z zakresu od 0 do 1 używane dokładnie tak jak 0%–100%.

Zalety

  • Prawie wszystkie wyświetlacze obsługują zakres tej przestrzeni kolorów.
  • Pomoc dotycząca narzędzi do projektowania.

Wady

  • Niezauważalnie liniowy (jak np. lch())
  • Brak szerokiej gamy kolorów.
  • Gradienty często przechodzą przez martwą strefę.
.valid-css-srgb-colors {
  --percents: color(srgb 34% 58% 73%);
  --decimals: color(srgb .34 .58 .73);

  --percents-with-opacity: color(srgb 34% 58% 73% / 50%);
  --decimals-with-opacity: color(srgb .34 .58 .73 / .5);

  /* empty */
  --empty-channels-black: color(srgb none none none);
  --empty-channels-black2: color(srgb);
}

Liniowy sRGB za pomocą funkcji color()

Trójkąt sRGB jest jedynym, który jest w pełni nieprzezroczysty, ponieważ pozwala zwizualizować wielkość gamy.

Ta liniowa alternatywa dla RGB oferuje przewidywalną intensywność kanałów.

Zalety

  • Bezpośredni dostęp do kanałów RGB przydaje się np. w silnikach gier czy pokazach świetlnych.

Wady

  • Nie jest postrzegany jako liniowy.
  • Na krawędziach jest czarny i biały.
.valid-css-srgb-linear-colors {
  --percents: color(srgb-linear 34% 58% 73%);
  --decimals: color(srgb-linear .34 .58 .73);

  --percents-with-opacity: color(srgb-linear 34% 58% 73% / 50%);
  --decimals-with-opacity: color(srgb-linear .34 .58 .73 / .5);

  /* empty */
  --empty-channels-black: color(srgb-linear none none none);
  --empty-channels-black2: color(srgb-linear);
}

Gradienty zostały szczegółowo omówione później, ale szybko można zobaczyć, jak czarno-białe są gradienty srgb i linear-srgb, które ilustrują różnice między nimi:

Dwa poziome gradienty w dwóch wierszach dla łatwiejszego porównania. Gradient sRGB jest gładki, jak to obserwujemy od wielu lat. Gradient liniowy sRGB jest jednak bardzo ciemny w pierwszych 5% i bardzo jasny w ostatnich 10%, przez co przez długi czas środkowy gradient był bardzo jasnoszary.

LEK

Obsługa przeglądarek

  • 111
  • 111
  • 113
  • 15

Źródło

Pierwsza część tego posta omawiająca składnię dostępu do kolorów spoza zakresu RGB. Jest to również pierwsza usługa, która bardzo ułatwia realizację gamy kolorów wyświetlacza. Dzieje się tak, ponieważ dowolne kolory kosmosu CIE (lch, oklch, lab, oklab) mogą reprezentować całe widmo kolorów widocznych dla człowieka.

Ta przestrzeń kolorów jest modelowana na podstawie wzroku człowieka i oferuje składnię, która pozwala określić m.in. te kolory. Kanały LCH to jasność, kolor i barwa. Odcień jest kątem, na przykład w HSL i HWB. Jasność jest wartością z zakresu od 0 do 100. Nie jest tak jednak jak w przypadku HSL, jest to szczególny, „perceptutycznie liniowy” światło skupiony na człowieku. Chroma jest podobna do nasycenia – może się mieścić w przedziale od 0 do 230, ale jest nieograniczona technicznie.

Zalety

  • Przewidywalna manipulacja kolorami dzięki percepcyjności, przeważnie liniowa (patrz oklch).
  • Wykorzystuje znane kanały.
  • Często ma żywe gradienty.

Wady

  • Łatwo wychodzisz z szerokiej gamy.
  • W rzadkich przypadkach gradient może wymagać dostosowania punktu środkowego, by zapobiec zmianie barwy.
.valid-css-lch-colors {
  --percent-and-degrees: lch(58% 32 241deg);
  --just-the-degrees: lch(58 32 241deg);
  --minimal: lch(58 32 241);

  --percent-opacity: lch(58% 32 241 / 50%);
  --decimal-opacity: lch(58% 32 241 / .5);

  /* chromaless and hueless */
  --empty-channels-white: lch(100 none none);
  --empty-channels-black: lch(none none none);
}

MODUŁ

Obsługa przeglądarek

  • 111
  • 111
  • 113
  • 15

Źródło

Kolejna przestrzeń kolorów zapewniająca dostęp do gamy CIE, ponownie z wymiarem postrzeganej jasności (L). Oceny A i B w laboratorium to unikalne osie ludzkiego rozpoznawania barw: czerwony-zielony i niebiesko-żółty. Gdy A ma wartość dodatnią, dodaje czerwony, a gdy jest mniejszy, dodaje zielony. Gdy podasz liczbę dodatnią, B doda wartość żółtą, a wartości ujemne – w kierunku niebieskiego.

Zalety

  • Idealnie spójne gradienty.
  • Wysoki zakres dynamiczny.

Wady

  • Potencjał zmiany odcienia.
  • Trudno powiedzieć autorowi lub odgadnąć kolor podczas odczytywania wartości.
.valid-css-lab-colors {
  --percent-and-degrees: lab(58% -16 -30);
  --minimal: lab(58 -16 -30);

  --percent-opacity: lab(58% -16 -30 / 50%);
  --decimal-opacity: lab(58% -16 -30 / .5);

  /* chromaless and hueless */
  --empty-channels-white: lab(100 none none);
  --empty-channels-black: lab(none none none);
}

OKLCH

Obsługa przeglądarek

  • 111
  • 111
  • 113
  • 15,4

Źródło

Ta przestrzeń kolorów jest korektyw według LCH. Podobnie jak LCH (LCH) nadal reprezentuje liniową jasność, C – barwa, a H – barwę.

To dość znajome rozwiązanie, jeśli zdarzyło Ci się już pracować z HSL lub LCH. Wybierz kąt na kole kolorów dla efektu H oraz stopień jasności i ciemności, dostosowując wartość L. Następnie mamy efekt chromatyzujący, który nie jest nasycony. Są one dosyć podobne, z tym że korekta jasności i kolorów zwykle występuje parami. Poza tym łatwo jest poprosić o wysokie nasycenie, które wykraczają poza docelową gamę kolorów.

Zalety

  • Odcienie niebieskiego i fioletowego to żaden niespodzianka.
  • Perspektywnie liniowa jasność.
  • Wykorzystuje znane kanały.
  • Wysoki zakres dynamiczny.
  • Ma nowoczesny selektor kolorów – marka Evil Martians.

Wady

  • Łatwo wychodzisz z szerokiej gamy.
  • Nowe i stosunkowo nieodkryte.
  • Za mało selektorów kolorów.
.valid-css-oklch-colors {
  --percent-and-degrees: oklch(64% .1 233deg);
  --just-the-degrees: oklch(64 .1 233deg);
  --minimal: oklch(64 .1 233);

  --percent-opacity: oklch(64% .1 233 / 50%);
  --decimal-opacity: oklch(64% .1 233 / .5);

  /* chromaless and hueless */
  --empty-channels-white: oklch(100 none none);
  --empty-channels-black: oklch(none none none);
}

OKLAB

Obsługa przeglądarek

  • 111
  • 111
  • 113
  • 15,4

Źródło

Ten obszar został poprawiony w LAB. Uznaje się, że jest to przestrzeń zoptymalizowana pod kątem jakości przetwarzania obrazu, co w przypadku CSS oznacza jakość gradientów i manipulacji funkcjami kolorów.

Zalety

  • Domyślna przestrzeń na animacje i interpolacje.
  • Perspektywnie liniowa jasność.
  • Bez zmiany odcienia jak w laboratorium.
  • Idealnie spójne gradienty.

Wady

  • Nowe i stosunkowo nieodkryte.
  • Za mało selektorów kolorów.
.valid-css-oklab-colors {
  --percent-and-degrees: oklab(64% -.1 -.1);
  --minimal: oklab(64 -.1 -.1);

  --percent-opacity: oklab(64% -.1 -.1 / 50%);
  --decimal-opacity: oklab(64% -.1 -.1 / .5);

  /* chromaless and hueless */
  --empty-channels-white: oklab(100 none none);
  --empty-channels-black: oklab(none none none);
}

Sieć reklamowa P3

Obsługa przeglądarek

  • 111
  • 111
  • 113
  • 15

Źródło

Trójkąt P3 jako jedyny jest całkowicie nieprzezroczysty, ponieważ ułatwia wizualizację rozmiaru gamy. To drugie miejsce w kolejności najmniejszej.

Przestrzeń barw i gama wyświetlaczy P3 stały się popularne od czasu, gdy Apple obsługiwał je na iMacu od 2015 roku. Firma Apple również od 2016 roku obsługiwała protokół display-p3 na stronach internetowych w ramach CSS, czyli o 5 lat przed każdą inną przeglądarką. Jeśli używasz przestrzeni kolorów sRGB, jest to świetna przestrzeń do pracy przy przenoszeniu stylów do wyższego zakresu dynamicznego.

Zalety

  • Świetna obsługa, uznawana za podstawę w przypadku wyświetlaczy HDR.
  • O 50% więcej kolorów niż w przypadku sRGB.
  • Narzędzia deweloperskie zapewniają doskonały selektor kolorów.

Wady

  • Z czasem zostaną one przekroczone przez przestrzenie Rec2020 i CIE.
.valid-css-display-p3-colors {
  --percents: color(display-p3 34% 58% 73%);
  --decimals: color(display-p3 .34 .58 .73);

  --percent-opacity: color(display-p3 34% 58% 73% / 50%);
  --decimal-opacity: color(display-p3 .34 .58 .73 / .5);

  /* chromaless and hueless */
  --empty-channels-black: color(display-p3 none none none);
  --empty-channels-black2: color(display-p3);
}

Rec2020

Obsługa przeglądarek

  • 111
  • 111
  • 113
  • 15

Źródło

Trójkąt Rec2020 jest jedynym, który jest całkowicie nieprzezroczysty, aby ułatwić wizualizację zakresu. To drugie miejsce w kolejności od największego.

Rec2020 wchodzi w skład produkcji UHDTV (telewizorów ultrawysokiej rozdzielczości), oferując szeroką gamę kolorów do wykorzystania w rozdzielczości 4K i 8K. Rec2020 to kolejny obszar oparty na podświetleniu RGB większy niż w przypadku wyświetlacza P3, ale nie tak powszechny jak Display P3.

Zalety

  • Kolory Ultra HD.

Wady

  • (jeszcze niezbyt częste) wśród konsumentów.
  • Rzadko się one pojawiają w urządzeniach mobilnych lub tabletach.
.valid-css-rec2020-colors {
  --percents: color(rec2020 34% 58% 73%);
  --decimals: color(rec2020 .34 .58 .73);

  --percent-opacity: color(rec2020 34% 58% 73% / 50%);
  --decimal-opacity: color(rec2020 .34 .58 .73 / .5);

  /* chromaless and hueless */
  --empty-channels-black: color(rec2020 none none none);
  --empty-channels-black2: color(rec2020);
}

A98 RGB

Obsługa przeglądarek

  • 111
  • 111
  • 113
  • 15

Źródło

Trójkąt A98 jest jedynym, który jest całkowicie nieprzezroczysty, ponieważ ułatwia wizualizację rozmiaru gamy. Wygląda na trójkątny średni rozmiar.

Format A98 RGB (skrót od Adobe 1998 RGB) został stworzona przez firmę Adobe i umożliwia korzystanie z większości kolorów osiągalnych na drukarkach CMYK. Oferuje więcej kolorów niż sRGB, zwłaszcza w odcieniach cyjanowych i zielonych.

Zalety

  • Większe niż przestrzenie kolorów sRGB i Display P3.

Wady

  • To nie jest wspólna przestrzeń, w której pracują projektanci treści cyfrowych.
  • Niewiele osób przenosi palety z CMYK.
.valid-css-a98-rgb-colors {
  --percents: color(a98-rgb 34% 58% 73%);
  --decimals: color(a98-rgb .34 .58 .73);

  --percent-opacity: color(a98-rgb 34% 58% 73% / 50%);
  --decimal-opacity: color(a98-rgb .34 .58 .73 / .5);

  /* chromaless and hueless */
  --empty-channels-black: color(a98-rgb none none none);
  --empty-channels-black2: color(a98-rgb);
}

ProPhoto – RGB

Obsługa przeglądarek

  • 111
  • 111
  • 113
  • 15

Źródło

Trójkąt ProPhoto jest jedyną funkcją w pełni nieprzezroczystą, która ułatwia wizualizację rozmiaru gamy. Wygląda na największą.

Ta szeroka gama kolorów stworzona przez Kodak oferuje niezwykle szeroki zakres kolorów podstawowych i minimalne zmiany odcienia przy zmianie jasności. Twierdzi również, że pokrywa 100% rzeczywistych kolorów powierzchni, co opisał Michael Pointer w 1980 r.

Zalety

  • Minimalna zmiana odcienia przy zmianie jasności.
  • Żywe kolory podstawowe.

Wady

  • Około 13% oferowanych kolorów jest wymyślonych, co oznacza, że nie mieści się w ich spektrum widzialnym dla człowieka.
.valid-css-prophoto-rgb-colors {
  --percents: color(prophoto-rgb 34% 58% 73%);
  --decimals: color(prophoto-rgb .34 .58 .73);

  --percent-opacity: color(prophoto-rgb 34% 58% 73% / 50%);
  --decimal-opacity: color(prophoto-rgb .34 .58 .73 / .5);

  /* chromaless and hueless */
  --empty-channels-black: color(prophoto-rgb none none none);
  --empty-channels-black2: color(prophoto-rgb);
}

XYZ, XYZ-d50, XYZ-d65

Obsługa przeglądarek

  • 111
  • 111
  • 113
  • 15

Źródło

Przestrzeń kolorów CIE XYZ obejmuje wszystkie kolory, które są widoczne dla osoby ze średnio wzrokiem. Dlatego jest używany jako standardowy odniesienie do innych przestrzeni kolorów. Y to luminancja, X i Z to możliwe kolory w obrębie podanej luminancji.

Różnica między modelami d50 i d65 stanowi punkt bieli, gdzie model d50 używa punktów bieli z d50, a d65 – punktu bieli D65.

Zalety

  • Dostęp linearny oświetleniowy ma przydatne zastosowania.
  • Doskonałe do fizycznego mieszania kolorów.

Wady

  • Nie są postrzegane jako liniowy, jak lch, oklch, lab i oklab.
.valid-css-xyz-colors {
  --percents: color(xyz 22% 26% 53%);
  --decimals: color(xyz .22 .26 .53);

  --percent-opacity: color(xyz .22 .26 .53 / 50%);
  --decimal-opacity: color(xyz .22 .26 .53 / .5);

  /* chromaless and hueless */
  --empty-channels-black: color(xyz none none none);
  --empty-channels-black2: color(xyz);
}
.valid-css-xyz-d50-colors {
  --percents: color(xyz-d50 22% 26% 53%);
  --decimals: color(xyz-d50 .22 .26 .53);

  --percent-opacity: color(xyz-d50 .22 .26 .53 / 50%);
  --decimal-opacity: color(xyz-d50 .22 .26 .53 / .5);

  /* chromaless and hueless */
  --empty-channels-black: color(xyz-d50 none none none);
  --empty-channels-black2: color(xyz-d50);
}
.valid-css-xyz-d65-colors {
  --percents: color(xyz-d65 22% 26% 53%);
  --decimals: color(xyz-d65 .22 .26 .53);

  --percent-opacity: color(xyz-d65 .22 .26 .53 / 50%);
  --decimal-opacity: color(xyz-d65 .22 .26 .53 / .5);

  /* chromaless and hueless */
  --empty-channels-black: color(xyz-d65 none none none);
  --empty-channels-black2: color(xyz-d65);
}

Niestandardowe przestrzenie kolorów

Specyfikacja CSS Color 5 również zawiera ścieżkę do uczenia przeglądarki niestandardowej przestrzeni kolorów. Jest to profil ICC, który informuje przeglądarkę, jak rozpoznać kolory.

@color-profile --foo {
  src: url(path/to/custom.icc);
}

Po wczytaniu możesz uzyskać dostęp do kolorów z tego profilu niestandardowego za pomocą funkcji color() i określić dla niego wartości kanału.

.valid-css-color-from-a-custom-profile {
  background: color(--foo 1 0 0);
}

Interpolacja kolorów

Przejście z jednego koloru na drugi dotyczy animacji, gradientów i mieszania kolorów. To przejście jest zwykle określone jako kolor początkowy i końcowy, gdzie przeglądarka ma się między nimi interpolować. Interpolacja w tym przypadku oznacza generowanie serii między kolorami w celu utworzenia płynnego przejścia zamiast przejścia błyskawicznego.

W przypadku gradientu interpolacja składa się z serii kolorów wzdłuż kształtu. Animacja zmienia się w serię kolorów na przestrzeni czasu.

@keyframes bg {
  0%, 100% {
    background: orange;
  }
  25% {
    background: magenta;
  }
  50% {
    background: lime;
  }
  75% {
    background: cyan;
  }
}

.circle {
  animation: bg 5s ease-in-out infinite;
}

Dzięki gradientowi kolory pośrednie są wyświetlane jednocześnie:

Nowości w interpolacji kolorów

Dzięki dodaniu nowych gamy i przestrzeni kolorów pojawiają się nowe opcje interpolacji. Zmiana koloru in hsl z niebieskiego na biały znacznie różni się od sRGB.

.classic-gradient-in-srgb {
  background: linear-gradient(to right, blue, white);
}

.new-gradient-in-hsl {
  background: linear-gradient(in hsl to right, blue, white);
}

Nie widzisz demonstracji Codepen?

Gradient sRGB pokazany nad gradientem HSL.

Co się stanie, jeśli przejdziesz z koloru w jednej przestrzeni do koloru w zupełnie innej:

.gradient {
  /* oklab will be the common space */
  background: linear-gradient(to right, lch(29.6 131 301), hsl(330 100% 50%));
}

.lch {
  /* lch is specified */
  background: linear-gradient(in lch to right, lch(29.6 131 301), hsl(330 100% 50%));
}

Nie widzisz demonstracji Codepen?

Gradient okLAB pokazany nad gradientem LCH.

Na szczęście w specyfikacji Kolor 4 znajdują się instrukcje dla przeglądarek na temat obsługi interpolacji przestrzeni kolorów. W powyższym przypadku .gradient przeglądarki zauważą rozróżniające przestrzenie kolorów i użyją domyślnej przestrzeni kolorów oklab. Może się wydawać, że przeglądarka użyje lch jako przestrzeni kolorów, ponieważ jest to pierwszy kolor, ale tak nie jest. Dlatego pokazujemy drugi gradient porównawczy .lch. Gradient .lch jest gradientem z przestrzeni kolorów lch.

Mniej pasów dzięki 16-bitowemu kolorowi

Do tej pory wszystkie kolory były zapisywane w jednej 32-bitowej liczbie całkowitej, która reprezentuje wszystkie 4 kanały: czerwony, zielony, niebieski i alfa. Jest to 8 bitów na kanał i 2^ 24 możliwych kolorów (z pominięciem kanału alfa). 2 ^ 24 = 16 777 216, „miliony kolorów”.

Po zastosowaniu tego koloru każdy kanał ma własną liczbę zmiennoprzecinkową (4 16-bitowe wartości zmiennoprzecinkowe). To 64-bitowa część danych, co daje znacznie ponad miliony kolorów.

Ta zmiana jest niezbędna do obsługi koloru HD. Zwiększa to ilość informacji o kolorach, które można zapisać, co ma przyjemny efekt uboczny – oznacza, że przeglądarka może wykorzystać więcej kolorów w gradiencie.

Gradientowe pasy mają miejsce, gdy kolor jest niewystarczający do utworzenia gładkiego gradientu i „paski” koloru stają się widoczne. Stosowanie pasów na ekranie jest znacznie zmniejszane przez przejście na wyższą rozdzielczość.

Wyświetlanych jest 6 paneli, każdy z różną ilością pasów gradientowych i trochą informacji o kompresji i głębokości bitów.
Źródło

Sterowanie interpolacją

Najkrótsza odległość między dwoma punktami jest zawsze linią prostą. Dzięki interpolacji kolorów przeglądarki domyślnie wybierają krótszą trasę. Przeanalizujmy scenariusz, w którym w cylindrze kolorów HSL znajdują się 2 punkty. Gradient uzyskuje swoje kroki koloru, podróżując wzdłuż linii między dwoma punktami.

linear-gradient(to right, #94e99c, #e06242)
Okrągły gradient z linią od zielonego do czerwonego biegnący prosto przez okrąg i przechodzący przez białe obszary.
(przykładowa prezentacja)
Widok z góry na walcę HSL z linią między granicami kolorów

Powyższa linia gradientu przechodzi prosto między kolorem zielonym a czerwonym i przebiega przez środek przestrzeni kolorów. Powyższe informacje pomagają w zrozumieniu problemu, ale nie pokazują dokładnie, co się dzieje. Oto gradient w Codepen. Pośrodku wyraźnie nie jest on biały, jak pokazano na przykładzie.

Środkowy obszar gradientu stracił jednak swój intensywność. Dzieje się tak, ponieważ najżywsze kolory znajdują się na krawędzi kształtu przestrzeni kolorów, a nie w środku, w pobliżu której znajduje się interpolacja. Strefa ta jest często nazywana „strefą martwą”. Jest kilka sposobów, aby to naprawić lub obejść.

Określ więcej poziomów gradientu, aby uniknąć martwej strefy

Metodą unikania obecnie martwej strefy jest dodanie do gradientu dodatkowych ograniczników barw, które celowo kierują interpolacją tak, aby utrzymać się w pełnych zakresach kolorów w przestrzeni kolorów. Można tu obejść ten problem, bo dodatkowe przystanki pomagają go ominąć.

Erik Kennedy oferuje narzędzie gradientu, które oblicza za Ciebie dodatkowe ograniczenia kolorów, aby pomóc Ci uniknąć martwej strefy nawet w przestrzeniach kolorów, które skłaniają do grawitacji. Po użyciu tej funkcji przekazanie tych samych kolorów z pierwszego przykładu, ale zmianę interpolacji kolorów na HSL, daje to taki efekt:

linear-gradient(90deg, #94e99c, #99e789, #ace67d, #c4e472, #e2e366, #e2bf5a, #e1934e, #e06242);
Okrągły gradient z wiszącą się linią wokół środka i licznymi zatrzymującymi się gradientem, kierujący go na zewnątrz.
(przykładowa prezentacja)
Widok z góry na walcę HSL z zakrzywioną linią i 9 stopniami kolorów

W przypadku punktów pośrednich interpolacja nie jest już linią prostą, lecz krzywą wokół martwej strefy, pomagając utrzymać nasycenie, uzyskując w efekcie znacznie intensywniejszy gradient.

Narzędzie działa świetnie, ale co by było, gdybyście mogli mieć podobną lub większą kontrolę bezpośrednio w CSS?

Kierowanie interpolacji kolorów

W kolorze 4 dodaliśmy możliwość kontrolowania strategii interpolacji barw, która zapewnia nowy sposób obchodzenia (:wink:) martwej strefy. Weź pod uwagę kąt barwy i rozważ gradient dwustopniowy, który tylko zmieni kąt, zmieniając na przykład odcień z 140deg na 240deg.

Interpolacja odcienia: krótsza lub dłuższa

Gradient będzie domyślnie korzystać z trasy shorter, chyba że określisz dla niego trasę longer. Opcje interpolacji odcieni kierują kąt obrotu, na przykład mówiąc użytkownikowi, że powinien skręcać w lewo, a nie w prawo (hej, Zoolander):

Widać to samo koło gradientu, ale tym razem narysowaliśmy koło wewnętrzne, które pokazuje długą drogę i krótszą.

W powyższym wizualnym przykładzie odległości interpolacji barw symulowano krótszą i długą ścieżkę, aby zilustrować różnicę. Krótka odległość ma mniej odcieni, ponieważ została pokonana przez najmniejszą możliwą odległość.

Interpolacja barwna zwiększająca lub zmniejszająca

W kolorze 4 są jeszcze dwie strategie interpolacji barw, ale są one stosowane tylko w cylindrycznej przestrzeni kolorów. Przy pozostawieniu 2 kolorów z poprzednich przykładów wizualizacja pokazuje teraz, jak działa zwiększanie i zmniejszanie.

Powyższy kod Codepen wykorzystał ColorJS, aby zademonstrować oczekiwany wynik. Kod CSS, który osiągniesz taki sam efekt bez biblioteki JavaScriptu, to:

.longer-hue-interpolation-in-css {
  background: linear-gradient(
    to right in hsl longer hue,
    hsl(180deg 100% 75%),
    hsl(240deg 100% 75%)
  );
}

.decreasing-hue-interpolation-in-css {
  background: linear-gradient(
    to right in hsl decreasing hue,
    hsl(180deg 100% 75%),
    hsl(240deg 100% 75%)
  );
}

Aby zakończyć interpolację barw, przygotowaliśmy zabawną zabawę, w której możesz zmieniać odcień z 2 stopni i obserwować efekty wyboru interpolacji barw oraz wpływ przestrzeni kolorów na wyniki gradientu. Efekty mogą być bardzo różne. Potraktuj to jak 4 nowe sztuczki, które właśnie pojawiły się na Twoim pasku narzędzi.

Gradienty w różnych przestrzeniach kolorów

Każda przestrzeń kolorów, ze względu na jej unikalny kształt i układ kolorów, daje inny gradient. Przyjrzyj się przykładom poniżej, zwłaszcza w przypadku haseł „niebieski na biały”. Przyjrzyj się, jak każda przestrzeń kolorów radzi sobie z tą różnicą. Zwróć uwagę, ile z nich ma kolor fioletowy w środku. Jest to tzw. „zmiana barwy” podczas interpolacji.

Nie widzisz demonstracji Codepen?

Zrzut ekranu przedstawiający zestaw gradientów od niebieskiego do białego.

Pokazany obraz to tylko jeden z wielu przykładów z Codepen. Warto wypróbować podgląd Canary lub Safari Tech Preview, aby się o tym przekonać.

Niektóre gradienty w tych przestrzeniach będą bardziej żywe od innych lub będą rzadziej przechodzić przez martwe strefy. Pokoje takie jak lab pakują kolory ze sobą w sposób zoptymalizowany pod kątem nasycenia, w przeciwieństwie do pokoi, w których człowiek pisze kolory – tak jak hwb().

.hwb {
  background: linear-gradient(to right, hwb(250 10% 10%), hwb(150 10% 10%));
}
.lab {
  background: linear-gradient(to right, lab(30 59.4 -96), lab(80 -64 36.2));
}

Powyższa analiza demograficzna jest subtelna, ale pokazuje bardziej spójną interpolację z laboratorium. Składnia modułu lab nie jest jednak łatwa do odczytania. W przypadku RGB lub hsl występują liczby ujemne. Mamy dobrą wiadomość: możemy użyć hwb, by zachować znajomą składnię, ale poprosić o całkowitą interpolację gradientu w innej przestrzeni kolorów, np. oklab.

.hwb {
  background: linear-gradient(in hwb to right, hwb(250 10% 10%), hwb(150 10% 10%));
}
.lab {
  background: linear-gradient(in oklab to right, hwb(250 10% 10%), hwb(150 10% 10%));
}

Nie widzisz demonstracji Codepen?

Dwa żywe gradienty umieszczone jedno nad drugim, aby ułatwić porównanie. Gradient hwb jest nieco bardziej intensywny.

W tym przykładzie użyto tych samych kolorów w hwb, ale określamy przestrzeń kolorów na potrzeby interpolacji na hwb lub oklab. hwb to doskonała przestrzeń kolorów dla intensywnych, ale potencjalnie niewidocznych stref martwych i jasnych punktów (zobacz przykład w przypadku błękitnego punktu). Ta funkcja jest bardzo fajna, bo możesz wypróbować kilka różnych przestrzeni kolorów, aby zobaczyć, który gradient podoba Ci się najbardziej.

Oto program Codepen, który eksperymentuje z gradientami i przestrzeniami kolorów oraz udostępnia strategie mieszania i dopasowania, aby zbadać dostępne możliwości. Nawet przejście z czerni do bieli jest inne w każdej przestrzeni kolorów!

Nie widzisz demonstracji Codepen?

Przestrzeń barwna pokazująca, jak to przenika z czarnego na biały, a każda daje inny wynik.

Ograniczanie zakresu gamut

Istnieją sytuacje, w których kolor może prosić o coś spoza zakresu. Weź pod uwagę ten kolor:

rgb(300 255 255)

Maksymalna wartość kanału koloru w przestrzeni kolorów rgb to 255, a tutaj określono 300 dla czerwonego. Co się dzieje Ograniczanie zakresu gamut.

Ograniczanie ma miejsce, gdy dodatkowe informacje są po prostu usuwane. 300 stanie się wewnętrznie 255 dla silnika kolorów. Kolor został zamknięty w odpowiednim miejscu.

Wybieranie przestrzeni kolorów

Wiele osób po zapoznaniu się z przestrzenią barw i ich efektami czuje się przytłoczona i chce wiedzieć, którą z nich wybrać. W moich badaniach i doświadczeniach nie uważam za jedną przestrzeń kolorów jako jedną przestrzeń dla wszystkich moich zadań. W każdym z nich są momenty, w których przynosi pożądane rezultaty.

Gdyby tylko było jedno najlepsze miejsce, nie byłoby tak wiele nowych miejsc.

Mogę jednak powiedzieć, że miejsca CIE – lab, oklab, lch i oklch to moje pierwsze miejsca. Jeśli wynik nie będzie satysfakcjonujący, sprawdzę inne pokoje. W przypadku mieszania kolorów i tworzenia gradientów zgadzam się z domyślnym wyborem specyfikacji oklab. Jeśli chodzi o systemy kolorów i ogólne kolory interfejsu, wolę oklch.

Oto kilka artykułów, w których użytkownicy podzielili się swoimi zaktualizowanymi strategiami kolorystycznymi w związku z nowymi przestrzeniami barw i funkcjami. Np. Andrey Sitnik wzięł wszystko pod uwagęoklch i być może przekona Cię do zrobienia tego samego:

  1. OKLCH w CSS: dlaczego zrezygnowaliśmy z RGB i HSLAndrey Sitnik
  2. Color Formats Autor: Josh W. Comeau
  3. OK, OKLCH, autor: Chris Coyier

Migracja do koloru CSS HD

Istnieją 2 główne strategie aktualizowania koloru projektu internetowego pod kątem obsługi wyświetlaczy o szerokiej gamie:

  1. Wyraźna degradacja
    Wykorzystaj nową przestrzeń kolorów i pozwól przeglądarce i systemowi operacyjnemu określić, jaki kolor wyświetlać w zależności od możliwości wyświetlacza.

  2. Stopniowe ulepszanie
    Za pomocą @supports i @media możesz ocenić możliwości przeglądarki użytkownika i jeśli zostaną spełnione warunki, podaj kolory z szerokiej gamy.

Jeśli przeglądarka nie rozpoznaje koloru display-p3:

color: red;
color: color(display-p3 1 0 0);

Jeśli przeglądarka rozpoznaje kolor display-p3:

color: red;
color: color(display-p3 1 0 0);

Każda z nich ma swoje wady i zalety. Oto krótka lista wad i zalet:

Proste pogorszenie

  • Zalety:
    • Najprostszą trasą.
    • Przeglądarka musi zmapować lub ograniczyć zakres do sRGB, jeśli nie ma szerokiego zakresu, więc odpowiedzialność za to ponoszą przeglądarka.
  • Wady
    • Przeglądarka może dopasować zakres lub gamę kolorów do koloru, który Ci się nie podoba.
    • Przeglądarka może nie rozpoznać żądania koloru i całkowicie się nie udać. Można to jednak ograniczyć, określając kolor dwukrotnie, umożliwiając kaskadzie przejście do poprzedniego rozpoznawanego koloru.

Stopniowe ulepszanie

  • Zalety:
    • Większa kontrola dzięki zarządzanej wierności kolorów.
    • Strategia dodawania, która nie ma wpływu na bieżące kolory.
  • Wady
    • Musisz zarządzać 2 oddzielnymi składniami kolorów.
    • Musisz zarządzać 2 oddzielnymi zakresami kolorów.

Sprawdzam obsługę gamy i przestrzeni kolorów

Przeglądarka umożliwia sprawdzenie obsługi szerokiej gamy funkcji i składni kolorów z kodów CSS i JavaScript. Nie udostępniamy dokładnej gamy kolorów określonych przez użytkownika. W ten sposób zapewniamy uogólnioną odpowiedź, która pozwala zachować prywatność. Dostępna jest jednak dokładna obsługa przestrzeni kolorów, ponieważ nie zależy od możliwości sprzętu użytkownika, takich jak gamut.

Zapytania dotyczące pomocy w zakresie kolorów

Poniższe przykłady kodu umożliwiają sprawdzenie zakresu kolorów na wyświetlaczu użytkownika.

Sprawdzam w usłudze porównywania cen

Najmniej szczegółowe zapytanie do zespołu pomocy to zapytanie o media dynamic-range:

Obsługa przeglądarek

  • 98
  • 98
  • 100
  • 13.1

Źródło

@media (dynamic-range: high) {
  /* safe to use HD colors */
}

Pytania o media color-gamut można zadawać w przybliżeniu, a także w innych przypadkach:

Obsługa przeglądarek

  • 58
  • 79
  • 110
  • 10

Źródło

@media (color-gamut: srgb) {
  /* safe to use srgb colors */
}

@media (color-gamut: p3) {
  /* safe to use p3 colors */
}

@media (color-gamut: rec2020) {
  /* safe to use rec2020 colors */
}

Możesz też przesłać 2 dodatkowe zapytania o media w związku z kontaktem z zespołem pomocy:

  1. @media (color)
  2. @media (color-index)
Sprawdzanie na podstawie JavaScriptu

W przypadku JavaScriptu funkcję window.matchMedia() można wywołać i przekazać do oceny zapytanie o multimedia.

Obsługa przeglądarek

  • 9
  • 12
  • 6
  • 5.1

Źródło

const hasHighDynamicRange = window
.matchMedia('(dynamic-range: high)')
.matches;

console.log(hasHighDynamicRange); // true || false

const hasP3Color = window
.matchMedia('(color-gamut: p3)')
.matches;

console.log(hasP3Color); // true || false

Powyższy wzorzec można skopiować do pozostałych zapytań o media.

Zapytania dotyczące obsługi przestrzeni kolorów

Poniższe przykłady kodu sprawdzają przeglądarkę użytkownika odwiedzającego i wybór przestrzeni kolorów, z którymi chce pracować.

Sprawdzam w usłudze porównywania cen

Indywidualną pomoc dotyczącą przestrzeni kolorów można uzyskać, wysyłając zapytanie @supports:

Obsługa przeglądarek

  • 28
  • 12
  • 22
  • 9

Źródło

@supports (background: rgb(0 0 0)) {
  /* rgb color space supported */
}


@supports (background: color(display-p3 0 0 0)) {
  /* display-p3 color space supported */
}


@supports (background: oklch(0 0 0)) {
  /* oklch color space supported */
}
Sprawdzanie na podstawie JavaScriptu

W przypadku JavaScriptu funkcję CSS.supports() można wywołać i przekazać parę właściwość-wartość, aby sprawdzić, czy przeglądarka ją rozpozna.

CSS.supports('background: rgb(0 0 0)')
CSS.supports('background: color(display-p3 0 0 0)')
CSS.supports('background: oklch(0 0 0)')

Łączenie testów dotyczących sprzętu i analizowania

Czekając na wdrożenie nowych funkcji kolorów przez każdą przeglądarkę, warto sprawdzić zarówno sprzęt, jak i możliwości analizy kolorów. Najczęściej używam tego podczas stopniowego poprawiania kolorów do wysokiej rozdzielczości:

:root {
  --neon-red: rgb(100% 0 0);
  --neon-blue: rgb(0 0 100%);
}

/* is the display HD? */
@media (dynamic-range: high) {

  /* does this browser understand display-p3? */
  @supports (color: color(display-p3 0 0 0)) {

    /* safe to use display-p3 colors */
    --neon-red: color(display-p3 1 0 0);
    --neon-blue: color(display-p3 0 0 1);
  }
}

Debugowanie koloru za pomocą Narzędzi deweloperskich w Chrome

Zaktualizowaliśmy Narzędzia deweloperskie w Chrome i zawierają nowe narzędzia, które ułatwiają programistom tworzenie, konwertowanie i debugowanie kolorów HD.

Zaktualizowano selektor kolorów

Selektor kolorów obsługuje teraz wszystkie nowe przestrzenie kolorów. Pozwala autorom na interakcję z wartościami kanału tak, jak byli byli.

Narzędzia deweloperskie z obsługą kolorów display-p3.

Granice gamuta

Dodano również linię gamutu, rysując linię między gamutami Srgb i Display-P3. Wyraźnie widać gamę kolorów, w których znajduje się wybrany kolor.

Narzędzia deweloperskie z linią gamut w selektorze kolorów.

Pomoże to autorom wizualnie odróżnić kolory HD od kolorów w innych. Jest on szczególnie przydatny podczas pracy z funkcją color() i nowymi przestrzeniami kolorów, ponieważ pozwalają one wyświetlać kolory zarówno w jakości innej niż HD, jak i HD. Jeśli chcesz sprawdzić gamy kolorów, otwórz selektor kolorów i zobacz.

Konwertuję kolory

Od wielu lat są w stanie przekonwertować kolory z obsługiwanych formatów, takich jak hsl, hwb, rgb i hex. shift + click na kwadratowej próbce kolorów w panelu Style, aby wykonać tę konwersję. Nowe narzędzia do określania kolorów nie tylko cyklicznie przenoszą konwersje, ale także generują wyskakujące okienko, w którym autorzy mogą wybrać właściwą konwersję.

Podczas konwersji ważne jest, aby wiedzieć, czy została przycięta w celu dopasowania do przestrzeni. W Narzędziach deweloperskich znajdziesz teraz ikonę ostrzeżenia o skonwertowanym kolorze, która informuje o tym klipie.

Narzędzia deweloperskie informujące o konwersjach o przycinaniu gamy z ikoną ostrzeżenia obok koloru.

Więcej informacji o funkcji debugowania CSS w Narzędziach deweloperskich znajdziesz w najnowszym ogłoszeniu.

Podsumowanie

Przestrzenie kolorów inne niż sRGB są w początkowej fazie rozwoju, ale myślę, że z czasem projektanci i deweloperzy mogą zauważyć wzrost ich użycia. Wiedza na przykład o tym, w jakiej przestrzeni kolorystycznego stworzyć system projektowania, to bardzo ważne narzędzie dla twórców. Każda przestrzeń kolorów ma unikalne cechy i powód, dla którego uwzględniliśmy ją w specyfikacji CSS. Można zacząć od nich i w razie potrzeby dodać je do specyfikacji.

Baw się tymi kolorowymi zabawkami. Większa energia, spójność manipulacji i interpolacji oraz ogólnie bardziej barwne wrażenia.

Materiały dodatkowe

Dodatkowe artykuły na poziomie 5