CSS-Farbleitfaden für HD

CSS Color 4 bietet im Web eine Vielzahl von Farbtools und -funktionen: mehr Farben, Bearbeitungsfunktionen und bessere Farbverläufe.

Adam Argyle
Adam Argyle

Seit mehr als 25 Jahren ist sRGB (Standard-Rot-Grün-Blau) der einzige Farbraum für CSS-Verläufe und -Farben, mit Farbraum wie rgb(), hsl() und Hexadezimalwert. Es ist die gängigste Farbskalafunktion von Displays und ein gemeinsamer Nenner. Wir haben uns sehr daran gewöhnt, Farben in dieser Farbskala anzugeben.

Die beliebtesten Farbformate nach prozentualem Vorkommen.
https://almanac.httparchive.org/de/2022/css#colors

Da Bildschirme immer mehr in der Lage sind, eine breite Palette von Farben darzustellen, benötigt CSS eine Möglichkeit, Farben aus diesen größeren Farbbereichen anzugeben. Die aktuellen Farbformate haben keine Sprache für große Farbbereiche.

Wenn CSS nie aktualisiert würde, bliebe es für immer in den Farbbereichen der 90er-Jahre fest, und würde niemals dem breiten Angebot entsprechen, das in Bildern und Videos zu finden ist. Eingegrenzt: nur 30% der Farben, die das menschliche Auge sehen kann Vielen Dank für Color Level 4 bei CSS für die Hilfe, dass wir dieser Falle entkommen konnten. Der Text stammt hauptsächlich von Lea Verou und Chris Liley.

Ab Chrome 111 wird der Farbraum und die Farbräume von CSS Color 4 in Safari unterstützt. display-p3 wird seit 2016 unterstützt. CSS kann jetzt HD-Displays (High Definition) unterstützen. Dabei werden Farben aus HD-Gamuts angegeben und es sind auch Farbräume mit Spezialisierungen verfügbar. In diesem Leitfaden erfahren Sie, wie Sie diese neue Welt der Farben für sich nutzen können.

Es wird eine Reihe von Bildern mit Übergängen zwischen einer großen und einer schmalen Farbskala gezeigt, die die Intensität der Farben und ihre Effekte veranschaulichen.
Jetzt ausprobieren

Browser, die unterstützt werden, haben 50% mehr Farben zur Auswahl. Sie dachten, 16 Millionen Farben klangen nach viel. Warten Sie, bis Sie sehen, wie viele Farben einige dieser neuen Bereiche zeigen können. Denken Sie auch an all die Banden, weil die Bittiefe nicht ausreicht. Das wurde ebenfalls aufgelöst.

Neben mehr Farben, die wahrscheinlich die lebendigsten Farben auf dem Display sind, bieten neue Farbräume einzigartige Tools und Methoden zum Verwalten und Erstellen von Farbsystemen. Früher hatten wir zum Beispiel HSL und seinen „lightness“-Kanal, der der beste Webentwickler war. In CSS gibt es nun die Wahrnehmungshelligkeit von LCH.

Zwei Farbtabellen sind nebeneinander. Die erste Tabelle zeigt einen HSL-Regenbogen mit etwa 10 Farben und daneben Graustufenfarben, die die Helligkeit dieser HSL-Farben darstellen. Die zweite Tabelle zeigt einen LCH-Regenbogen, der wesentlich weniger leuchtend ist, aber die Graustufenfarben daneben sind einheitlich.
    Das zeigt, dass LCH im Gegensatz zu HSL einen gesunden konstanten Helligkeitswert hat.
Vorschau für sich selbst: https://codepen.io/web-dot-dev/pen/poZgXxy

Darüber hinaus erhalten Verläufe und Mischungen einige Upgrades: Unterstützung des Farbraums, Farbinterpolationsoptionen und weniger Streifenbildung. In der folgenden Abbildung sehen Sie einige der Mixing-Upgrades. Die beiden beliebtesten Farbkombinationen werden im sRGB-Format verwendet. Die unteren beiden Farbmischungen befinden sich in Display p3. Display p3 hat lebhaftere Farben und die Mischungen ergeben ein vollständiges Schwarz-Weiß-Bild in der Mitte. Dabei wirkt sRGB etwas entsättigt und die Mixe in der Mitte sind keine vollständigen Schwarz- oder Weiß-Ergebnisse.

Die beiden beliebtesten Farbmischungen sind sRGB mit sRGB-Farben. Die beiden unteren Farbmischungen befinden sich in Display P3. Display p3 hat kräftigere Farben und die Mischungen ergeben in der Mitte Schwarz-Weiß, wobei sRGB etwas ungesättigt wirkt und die Mischungen in der Mitte keine Schwarz-Weiß-Ergebnisse sind.
https://codepen.io/web-dot-dev/pen/poZgXQb

In diesem Leitfaden erfahren Sie, wo es Farben gegeben hat, wo sie eingesetzt werden und wie CSS Webentwicklern die Verwaltung von Farben ermöglicht und unterstützt.

Überblick

Das Problem mit Farbe und dem Web ist, dass CSS nicht für High Definition bereit ist. Die meisten Bildschirme hingegen, die in der Hosentasche, auf dem Schoß oder an der Wand befestigt sind, haben eine breite Palette und High Definition-Farben. Die Farbfunktionen von Displays wuchsen schneller als CSS. Jetzt muss CSS aufholen.

Es gibt noch viel mehr als nur „mehr Farben“. Am Ende dieses Artikels werden Sie in der Lage sein, mehr Farben anzugeben, Farbverläufe zu optimieren und die besten Farbräume und Farbskala für jede Aufgabe auszuwählen.

Was ist eine Farbskala?

Die Farbskala stellt die Größe von etwas dar. Der Ausdruck "Millionen Farben" beschreibt die Farbskala eines Displays oder die Farbpalette, aus der es wählen kann. In der folgenden Abbildung werden drei Gamuts verglichen. Je größer die Größe, desto mehr Farben stehen zur Verfügung.

Die Farbskala werden als Dreiecksform nebeneinander verglichen.
  sRGB ist die kleinste und Rec2020 ist die größte.

Ein Farbraum kann auch einen Namen haben. Wie ein Basketball gegen einen Baseball oder eine Vene-Kaffeetasse gegen eine Grande kann ein Name für die Größe Menschen helfen, zu kommunizieren. Durch das Erlernen dieser Farbskalanamen können Sie eine Reihe von Farben kommunizieren und schnell verstehen.

In diesem Artikel werden sieben neue Farbskalen vorgestellt, die alle einen größeren Bereich als sRGB bieten. Außerdem werden die verschiedenen Funktionen beschrieben, die Ihnen bei der Auswahl helfen:

Visueller Farbraum von Menschen

Die Farbskala wird oft mit der visuellen Farbskala des Menschen verglichen, d. h. die gesamte Farbskala, die das menschliche Auge sehen kann. HVS wird oft mit einem chromatischen Diagramm dargestellt:

Eine Hufeisenform mit einem hohlen Dreieck in der Mitte hat einen leuchtenden Farbverlauf.
Quelle: Wikipedia

Die äußerste Form ist das, was wir als Menschen sehen können, und das innere Dreieck ist der rgb()-Funktionsbereich, auch bekannt als sRGB-Farbraum.

Wie Sie oben die Dreiecke gesehen haben, vergleichen Sie die Gamutgrößen und sehen sich unten die Dreiecke an. Dies ist die branchenübliche Art, über Farbskala zu kommunizieren und sie zu vergleichen.

Was ist ein Farbraum?

Farbräume sind Anordnungen einer Farbskala, die eine Form und eine Methode für den Zugriff auf Farben festlegen. Viele davon sind einfache 3D-Formen wie Würfel oder Zylinder. Diese Farbanordnung bestimmt, welche Farben nebeneinander liegen und wie der Zugriff auf und das Interpolieren von Farben funktioniert.

RGB ist wie ein rechteckiger Farbraum, in dem über Koordinaten auf drei Achsen auf Farben zugegriffen werden kann. HSL ist ein zylindrischer Farbraum, in dem über einen Farbtonwinkel und Koordinaten auf zwei Achsen auf Farben zugegriffen werden kann.

Ein zur Hälfte ausgeschnittener RGB-Würfel und Slices in einem HSL-Zylinder sind nebeneinander zu sehen, um zu zeigen, wie die Farben in jedem Raum in einer Form geformt sind.
https://en.wikipedia.org/wiki/HSL_and_HSV

Die Spezifikation für Ebene 4 führt 12 neue Farbräume für die Suche nach Farben aus den sieben neuen Farbskala ein, die wir zuvor vorgestellt haben:

Diese sind zusätzlich zu den vier zuvor verfügbaren Farbräumen verfügbar:

Farbskala und Farbraumzusammenfassung

Ein Farbraum ist eine Zuordnung von Farben, wobei ein Farbraum ein Farbbereich ist. Stellen Sie sich eine Farbskala als Gesamtpartikel und einen Farbraum als eine Flasche vor, die diesen Teilchenbereich aufnehmen soll.

Hier ist eine interaktive Grafik von Alexey Ardov, die Farbräume veranschaulicht. In dieser Demo zeigen, ziehen und zoomen. Ändern Sie den Farbraum, um andere Bereiche zu visualisieren.

  • Nutzen Sie die Farbskala, um über eine Farbpalette zu sprechen, z. B. einen niedrigen oder einen schmalen Farbraum im Vergleich zu einem großen oder großen Farbraum.
  • Verwenden Sie Farbräume, um über Farbanordnungen und über die Syntax zur Angabe einer Farbe, über Manipulation und Interpolation von Farben zu sprechen.
Ein Würfel mit vielen verschiedenen farbigen Punkten.
Oben sehen Sie die sRGB-Gamut der Partikel, die in einen RGB-Würfel-Farbraum passen Bildquelle

Auf mehr Farben, neue Gruppenbereiche und Debug-Ergebnisse zugreifen

CSS Color 4 beschreibt eine Reihe neuer Funktionen und Tools für CSS und Farbe. Zunächst eine Wiederholung, wo sich Farben vor diesen neuen Funktionen befanden. Dann eine Übersicht über die neuen Farbräume, Syntaxen und Tools.

Der folgende Codepen zeigt alle neuen und alten Farbsyntaxen zusammen:

Rückblick auf die klassischen Farbräume

Seit den 2000er-Jahren konnten Sie Folgendes für alle CSS-Eigenschaften verwenden, die eine Farbe als Wert akzeptieren: Hexadezimal (Hexadezimalzahlen), rgb(), rgba(), mit Namen wie hotpink oder mit Keywords wie currentColor. Seit ca. 2010 könnte CSS je nach Browser hsl()-Farben verwenden. 2017 erschien dann Hex mit Alpha. hwb() wird seit Kurzem auch in Browsern unterstützt.

Alle diese klassischen Farbräume beziehen sich auf Farben im selben Farbraum, nämlich sRGB.

HEX

Unterstützte Browser

  • 1
  • 12
  • 1
  • 1

Quelle

Der Hexadezimalfarbraum gibt R, G, B und A mit Hexadezimalzahlen an. Die folgenden Codebeispiele zeigen alle Möglichkeiten, wie mit dieser Syntax Rot, Grün und Blau plus Deckkraft angegeben werden können.

.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

Unterstützte Browser

  • 1
  • 12
  • 1
  • 1

Quelle

Der RGB-Farbraum bietet direkten Zugriff auf die roten, grünen und blauen Kanäle. Sie können einen Betrag zwischen 0 und 255 oder einen Prozentsatz von 0 bis 100 angeben. Diese Syntax gab es schon vor der Syntaxnormalisierung in den Spezifikationen, sodass Sie auch Kommas und No-Komma-Syntaxen in freier Wildbahn sehen werden. In Zukunft sind Kommas nicht mehr erforderlich.

.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

Unterstützte Browser

  • 1
  • 12
  • 1
  • 3.1

Quelle

Als einer der ersten Farbräume, die sich an der menschlichen Sprache und Kommunikation orientieren, bietet HSL (Farbtonsättigung und -helligkeit) alle Farben des sRGB-Gamuts, ohne dass Ihr Gehirn wissen muss, wie Rot, Grün und Blau interagieren. Wie bei RGB waren Kommas ursprünglich in der Syntax enthalten, aber ab jetzt sind Kommas nicht mehr erforderlich.

.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%);
}

Hardware

Unterstützte Browser

  • 101
  • 101
  • 96
  • 15

Quelle

Ein weiterer sRGB-Gamut-Farbraum, der darauf ausgerichtet ist, wie Menschen Farben beschreiben, ist HWB (Farbton, Weißheit, Schwärzung). Sie können einen Farbton auswählen und Weiß oder Schwarz kombinieren, um die gewünschte Farbe zu finden.

.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%);
}

Die neuen Farbräume im Web

Mit den folgenden Farbräumen ist eine größere Farbpalette als bei sRGB verfügbar. Der Farbraum Display-p3 bietet fast doppelt so viele Farben wie RGB, während Rec2020 fast doppelt so viele Farben bietet wie Display-p3. Das sind ganz schön viele Farben!

Fünf gestapelte Dreiecke unterschiedlicher Farbe, um die Beziehung und Größe der einzelnen neuen Farbräume zu veranschaulichen.

Die color()-Funktion

Unterstützte Browser

  • 111
  • 111
  • 113
  • 15

Quelle

Die neue color()-Funktion kann für jeden Farbraum verwendet werden, der Farben mit R-, G- und B-Kanälen angibt. color() verwendet zuerst einen Farbraumparameter, dann eine Reihe von Kanalwerten für RGB und optional einige Alphawerte.

Viele der neuen Farbräume nutzen diese Funktion, da spezielle Funktionen wie rgb, srgb, hsl, hwb usw. zu einer langen Liste wurden, sodass der Farbraum einfacher als Parameter verwendet werden konnte.

Vorteile

  • Ein normalisierter Bereich für den Zugriff auf Farbräume, die RGB-Kanäle verwenden.
  • Es kann auf jeden RGB-basierten Farbraum mit großem Farbraum skaliert werden.

Nachteile

  • Funktioniert nicht mit HSL, HWB, LCH, okLCH oder 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 über color()

Das sRGB-Dreieck ist das einzige vollständig undurchsichtige Dreieck, um die Größe der Farbskala zu visualisieren.

Dieser Farbraum bietet dieselben Funktionen wie rgb(). Außerdem sind Dezimalzahlen zwischen 0 und 1 verfügbar, die genau wie 0% bis 100 % verwendet werden.

Vorteile

  • Fast alle Displays unterstützen diesen Farbraum.
  • Unterstützung für Designtools.

Nachteile

  • Nicht wahrnehmbar linear (wie dies lch() ist)
  • Keine Wide-Gamut-Farben.
  • Farbverläufe durchlaufen oft eine Tote Zone.
.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);
}

Lineares sRGB über color()

Das sRGB-Dreieck ist das einzige vollständig undurchsichtige Dreieck, um die Größe der Farbskala zu visualisieren.

Diese lineare Alternative zu RGB bietet vorhersehbare Kanalintensität.

Vorteile

  • Direkter Zugriff auf RGB-Kanäle, nützlich für Funktionen wie Spiel-Engines oder Lichtshows

Nachteile

  • Nicht wahrnehmbar linear.
  • Die Ränder haben jeweils schwarz-weiß.
.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);
}

Farbverläufe werden später noch ausführlicher behandelt. Es ist jedoch schnell sinnvoll, einen Schwarz-zu-Weiß-Farbverlauf von srgb und linear-srgb zu sehen, um die Unterschiede zu veranschaulichen:

Zwei horizontale Farbverläufe, die zum einfachen Vergleich in zwei Zeilen angezeigt werden. Wie schon seit vielen Jahren festgestellt, ist der sRGB-Farbverlauf weich. Der lineare sRGB-Farbverlauf ist jedoch in den ersten 5% sehr dunkel und in den letzten 10 % sehr hell, wodurch die Mitte über längere Zeit sehr hellgrau wird.

LCH

Unterstützte Browser

  • 111
  • 111
  • 113
  • 15

Quelle

Im ersten Bereich dieses Beitrags wird die Syntax für den Zugriff auf Farben außerhalb der RGB-Gamut vorgestellt. Es ist auch das erste, das es sehr einfach macht, Farben für ein Display außerhalb der Farbpalette zu erstellen. Das liegt daran, dass alle CIE-Bereichsfarben (lch, oklch, Lab, Oklab) das gesamte für Menschen sichtbare Farbspektrum darstellen können.

Dieser Farbraum ist dem menschlichen Sehen modelliert und bietet Syntax, um diese und weitere Farben anzugeben. Die LCH-Kanäle sind Helligkeit, Chroma und Farbton. Farbton ist ein Winkel, wie bei HSL und HWB. Helligkeit ist ein Wert zwischen 0 und 100. Im Gegensatz zur Helligkeit von HSL handelt es sich jedoch um eine spezielle, "perceptuell lineare", menschenzentrierte Helligkeit. Chroma ähnelt der Sättigung und kann zwischen 0 und 230 liegen, ist aber auch technisch unbegrenzt.

Vorteile

  • Vorhersehbare Farbmanipulation dank wahrnehmbar linearer Farbpalette, zumeist linear (siehe oklch).
  • Nutzt bekannte Kanäle.
  • Hat häufig lebhafte Farbverläufe.

Nachteile

  • Einfach rauskommen.
  • In seltenen Fällen muss möglicherweise der Mittelpunkt des Farbverlaufs angepasst werden, um eine Farbtonverschiebung zu verhindern.
.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);
}

LAB

Unterstützte Browser

  • 111
  • 111
  • 113
  • 15

Quelle

Ein weiterer Farbraum, der für den Zugriff auf den CIE-Gamut erstellt wurde, wieder mit einer wahrnehmlich linearen Helligkeitsdimension (L). Das A und B in Lab stellen die einzigartigen Achsen der menschlichen Farbwahrnehmung dar: Rot-Grün und Blau-Gelb. Wenn A einen positiven Wert erhält, wird Rot hinzugefügt und Grün hinzugefügt, wenn der Wert unter 0 liegt. Wenn B eine positive Zahl erhält, wird Gelb hinzugefügt, wobei negative Werte in Richtung Blau gehen.

Vorteile

  • Wahrhaft konsistente Farbverläufe.
  • High Dynamic Range.

Nachteile

  • Potenzial für Farbtonverschiebung.
  • Beim Lesen von Werten ist es schwierig, den Autor zu schreiben oder eine Farbe zu erraten.
.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

Unterstützte Browser

  • 111
  • 111
  • 113
  • 15,4

Quelle

Dieser Farbraum ist korrigierbar von LCH. Und wie LCH stellt (L) weiterhin die wahrnehmlich lineare Helligkeit dar, C für Chroma und H für Farbton.

Dieser Bereich kommt mir bekannt vor, wenn Sie mit HSL oder LCH gearbeitet haben. Wähle einen Winkel im Farbrad für H und durch Anpassung von L einen Helligkeits- oder Dunkelheitsgrad aus, aber dann haben wir Chroma anstelle von Sättigung. Sie sind ziemlich identisch, abgesehen davon, dass die Anpassungen an Helligkeit und Chroma meist paarweise erfolgen. Oder es kann einfach sein, Farben mit hohem Chroma zu verlangen, die außerhalb eines Zielgamuts liegen.

Vorteile

  • Keine Überraschungen beim Arbeiten mit blauen und lila Farbtönen.
  • Perzeptiv lineare Helligkeit.
  • Nutzt bekannte Kanäle.
  • High Dynamic Range.
  • Verfügt über eine moderne Farbauswahl – von Evil Martians.

Nachteile

  • Einfach rauskommen.
  • Neu und noch relativ unerforscht.
  • Wenige Farbauswahl.
.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

Unterstützte Browser

  • 111
  • 111
  • 113
  • 15,4

Quelle

Dieser Bereich ist die Korrektur des LAB. Es wird als Bereich bezeichnet, der auch für die Bildverarbeitungsqualität optimiert ist. In CSS stehen für uns Farbverläufe und die Manipulation von Farbfunktionen zur Verfügung.

Vorteile

  • Standardbereich für Animationen und Interpolationen.
  • Perzeptiv lineare Helligkeit.
  • Keine Farbtonänderung wie LAB.
  • Wahrhaft konsistente Farbverläufe.

Nachteile

  • Neu und noch relativ unerforscht.
  • Wenige Farbauswahl.
.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);
}

Display P3

Unterstützte Browser

  • 111
  • 111
  • 113
  • 15

Quelle

Das P3-Dreieck für die Anzeige ist das einzige vollständig undurchsichtige Dreieck, um die Größe des Umfangs darzustellen. Es sieht aus wie der zweite von der kleinsten.

Die Farbskala und der Farbraum des Displays P3 sind sehr beliebt, seit Apple sie seit 2015 auf dem iMac unterstützt. Apple hat Display-p3 auch seit 2016 auf Webseiten über CSS unterstützt und ist damit fünf Jahre älter als jeder andere Browser. Bei Verwendung des sRGB-Farbraums ist dies ein großartiger Farbraum, in dem Sie mit der Arbeit beginnen können, wenn Sie Stile in einen höheren dynamischen Bereich verschieben.

Vorteile

  • Hervorragender Support – gilt als Basis für HDR-Displays.
  • 50% mehr Farben als bei sRGB
  • Die Entwicklertools bieten eine hervorragende Farbauswahl.

Nachteile

  • Wird in Zukunft von Rec2020- und CIE-Bereichen übertroffen.
.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

Unterstützte Browser

  • 111
  • 111
  • 113
  • 15

Quelle

Das Rec2020-Dreieck ist das einzige vollständig undurchsichtige Dreieck, um die Größe des Umfangs darzustellen. Sieht aus wie der zweite von der größten.

Rec2020 ist Teil der Bewegung für UHDTV (Ultra-HD-Fernsehen), die eine große Farbpalette für die Verwendung in 4K- und 8K-Medien bietet. Rec2020 ist ein weiterer RGB-basierter Farbraum, der größer ist als Display-p3, aber nicht annähernd so häufig von Nutzern verwendet wird wie Display P3.

Vorteile

  • Ultra-HD-Farben.

Nachteile

  • Bei den Verbrauchern (noch) nicht so üblich.
  • Nicht häufig in Handhelds oder Tablets zu finden.
.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

Unterstützte Browser

  • 111
  • 111
  • 113
  • 15

Quelle

Das Dreieck A98 ist das einzige vollständig undurchsichtige Dreieck, um die Größe des Umfangs darzustellen. Es sieht aus wie das Dreieck mittlerer Größe.

A98 RGB wurde von Adobe entwickelt und enthält die meisten Farben, die mit CMYK-Druckern möglich sind. Es bietet mehr Farben als sRGB, insbesondere in Cyan und Grün.

Vorteile

  • Größer als die sRGB- und Display P3-Farbräume.

Nachteile

  • Dies ist kein üblicher Bereich, in dem digitale Designschaffende arbeiten.
  • Nur wenige Leute übertragen Farbvorlagen aus 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);
}

Pro Photo (RGB)

Unterstützte Browser

  • 111
  • 111
  • 113
  • 15

Quelle

Das ProFoto-Dreieck ist das einzige vollständig undurchsichtige Element, mit dem sich die Größe der Farbskala darstellen lässt. Es sieht am größten aus.

Dieser von Kodak erstellte breite Farbraum bietet einen einzigartigen Farbraum mit sehr vielen Primärfarben und minimale Farbtonverschiebungen bei einer Änderung der Helligkeit. Sie soll außerdem 100% der realen Oberflächenfarben abdecken, wie von Michael Pointer aus dem Jahr 1980 dokumentiert.

Vorteile

  • Minimale Farbtonänderungen beim Ändern der Helligkeit.
  • Kräftige Primärfarben.

Nachteile

  • Etwa 13% der angebotenen Farben sind imaginär, was bedeutet, dass sie nicht Teil des für Menschen sichtbaren Spektrums liegen.
.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

Unterstützte Browser

  • 111
  • 111
  • 113
  • 15

Quelle

Der CIE-XYZ-Farbraum umfasst alle Farben, die für eine Person mit durchschnittlichem Sehvermögen sichtbar sind. Daher wird sie als Standardreferenz für andere Farbräume verwendet. Y steht für die Leuchtdichte, X und Z sind mögliche Chromen innerhalb der gegebenen Leuchtdichte Y.

Der Unterschied zwischen d50 und d65 ist der Weißpunkt, wobei d50 die d50-Weißpunkte und d65 den d65-Weißpunkt verwendet.

Vorteile

  • Der Zugriff auf lineares Licht bietet praktische Anwendungsfälle.
  • Ideal für das Mischen von physischen Farben.

Nachteile

  • Nicht wahrnehmbar linear wie lch, oklch, Lab und 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);
}

Benutzerdefinierte Farbräume

Die CSS Color 5-Spezifikation enthält auch einen Pfad zum Erklären eines benutzerdefinierten Farbraums für den Browser. Dies ist ein ICC-Profil, das dem Browser mitteilt, wie Farben aufgelöst werden sollen.

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

Nach dem Laden können Sie mit der Funktion color() auf die Farben aus diesem benutzerdefinierten Profil zugreifen und die Kanalwerte dafür angeben.

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

Farbinterpolation

Der Übergang von einer Farbe zu einer anderen wird durch Animationen, Farbverläufe und Farbmischungen unterstützt. Dieser Übergang wird normalerweise als Ausgangs- und Endfarbe angegeben, wobei vom Browser erwartet wird, dass sie zwischen ihnen interpoliert. „Interpolieren“ bedeutet in diesem Fall, dass eine Reihe von Farben generiert wird, um einen weichen Übergang zu erzeugen.

Bei einem Farbverlauf ist die Interpolation eine Reihe von Farben entlang einer Form. Bei einer Animation ist es eine Reihe von Farben im Zeitverlauf.

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

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

Bei einem Farbverlauf werden die Farben dazwischen auf einmal angezeigt:

Neuerungen bei der Farbinterpolation

Durch neue Gamuts und Farbräume wurden neue Optionen für die Interpolation hinzugefügt. Wenn die Farbe in hsl von Blau zu Weiß übergeht, unterscheidet sich dies stark von 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);
}

Sie können die Codepen-Demo nicht sehen?

sRGB-Farbverlauf über einem HSL-Farbverlauf

Was passiert dann, wenn Sie von einer Farbe in einem Raum zu einer Farbe in einem ganz anderen Raum übergehen:

.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%));
}

Sie können die Codepen-Demo nicht sehen?

Über einem LCH-Farbverlauf abgebildeter okLAB-Farbverlauf

Glücklicherweise enthält die Spezifikation Color 4 für die Browser Anweisungen zum Umgang mit diesen Interpolationen von unterschiedlichen Farbräumen. Im obigen Fall für .gradient bemerken Browser die unterscheidenden Farbräume und verwenden den Standardfarbraum oklab. Vielleicht denken Sie, der Browser würde lch als Farbraum verwenden, da dies die erste Farbe ist. Das ist aber nicht der Fall. Deshalb zeige ich einen zweiten Vergleichsverlauf .lch an. Der Farbverlauf .lch ist ein Farbverlauf aus dem lch-Farbraum.

Weniger Streifen dank 16-Bit-Farben

Zuvor wurden alle Farben in einer 32-Bit-Ganzzahl gespeichert, die alle vier Kanäle darstellt: Rot, Grün, Blau und Alpha. Dies sind 8 Bit pro Kanal und 2^ 24 mögliche Farben (ohne Berücksichtigung von Alpha). 2 ^ 24 = 16.777.216, "Millionen von Farben".

Nach dieser Farbarbeit vier 16-Bit-Gleitkommawerte, hat jeder Kanal einen eigenen Gleitkommawert, anstatt ineinander geworfen zu werden. Insgesamt sind dies 64 Bit, was zu viel mehr als Millionen Farben führt.

Dies ist für die Unterstützung von HD-Farben erforderlich. Dadurch können mehr Farbinformationen gespeichert werden, was den Vorteil hat, dass der Browser mehr Farben für den Farbverlauf verwenden kann.

Farbverlaufs-Streifen sind zu erkennen, wenn nicht genügend Farben für einen glatten Farbverlauf vorhanden sind und „Farbstreifen“ sichtbar werden. Durch ein Upgrade auf Farben mit höherer Auflösung wird Streifenbildung stark reduziert.

Es werden sechs Felder mit jeweils unterschiedlichem Gradient-Banding und einigen Informationen zur Komprimierung und Bittiefe gezeigt.
Bildquelle

Interpolation steuern

Die kürzeste Entfernung zwischen zwei Punkten ist immer eine gerade Linie. Bei der Farbinterpolation verwenden Browser standardmäßig die kurze Route. Stellen Sie sich ein Szenario vor, bei dem es zwei Punkte in einem HSL-Farbzylinder gibt. Ein Farbverlauf erhält seine Farbstufen, indem er sich entlang der Linie zwischen den beiden Punkten bewegt.

linear-gradient(to right, #94e99c, #e06242)
Ein kreisförmiger Farbverlauf mit einer Linie von Grün nach Rot, die gerade durch den Kreis verläuft und durch die weißen Bereiche verläuft.
(Beispiel zur Demonstration)
Draufsicht auf einen HSL-Zylinder mit einer Linie zwischen den Farbstopps

Die obige Farbverlaufslinie verläuft direkt zwischen der grünlichen und der rötlichen Farbe und verläuft durch die Mitte des Farbraums. Das obige Beispiel ist zwar hilfreich, um Ihnen ein erstes Verständnis zu vermitteln, es ist aber nicht immer das, was passiert. Hier sehen Sie den Farbverlauf im folgenden Codepen. Er ist eindeutig nicht in der Mitte weiß, wie in der Beispiel-Demo gezeigt.

Der mittlere Bereich des Farbverlaufs hat jedoch seine Lebendigkeit verloren. Das liegt daran, dass sich die leuchtendsten Farben am Rand der Farbraumform befinden und nicht in der Mitte, in der sich die Interpolation nahegelegt hat. Dies wird im Allgemeinen als tote Zone bezeichnet. Es gibt verschiedene Möglichkeiten, dieses Problem zu beheben.

Festlegen von mehr Gradientenstopps, um die Totzone zu vermeiden

Eine Technik, um die Totzone zu vermeiden, besteht heute darin, dem Farbverlauf zusätzliche Farbstopps hinzuzufügen, die die Interpolation bewusst so steuern, dass sie innerhalb der lebendigen Bereiche eines Farbraums bleibt. Dies ist im wahrsten Sinne eine Problemumgehung, da die zusätzlichen Zwischenstopps dazu beitragen, die Totzone zu umgehen.

Es gibt ein von Erik Kennedy entwickeltes Farbverlauf-Tool, mit dem zusätzliche Farbstopps für Sie berechnet werden können, damit Sie die tote Zone auch in Farbräumen vermeiden können, die dazu neigen. Wenn damit dieselben Farben aus dem ersten Beispiel übergeben, aber die Farbinterpolation in HSL geändert wird, ergibt sich Folgendes:

linear-gradient(90deg, #94e99c, #99e789, #ace67d, #c4e472, #e2e366, #e2bf5a, #e1934e, #e06242);
Ein kreisförmiger Farbverlauf mit einer um die Mitte gekrümmten Linie mit vielen Zwischenstopps für den Farbverlauf, die vom Mittelpunkt wegführt.
(Beispielvorführung)
Draufsicht auf einen HSL-Zylinder mit einer gebogenen Linie mit 9 Farbstopps

Bei geführten Stopppunkten ist die Interpolation keine gerade Linie mehr, sondern scheint sich um die Totezone zu krümmen, wodurch die Sättigung erhalten bleibt, was zu einem viel lebhafteren Farbverlauf führt.

Das Tool funktioniert hervorragend. Was wäre, wenn Sie direkt in CSS eine ähnliche oder mehr Kontrolle haben könnten?

Farbinterpolation steuern

In Farbe 4 wurde die Möglichkeit hinzugefügt, die Strategie Farbtoninterpolation zu steuern. Dies ist eine neue Möglichkeit, die Totzone zu umgehen. Denken Sie an einen Farbtonwinkel und einen Farbverlauf mit zwei Stopps, der nur den Winkel ändert und beispielsweise von 140deg nach 240deg verschiebt.

Kürzere und längere Farbinterpolation

Der Farbverlauf verwendet standardmäßig die shorter-Route, sofern Sie nicht angeben, dass er die longer-Route nehmen soll. Farbton-Interpolationsoptionen steuern die Winkeldrehung, z. B. dass jemand nach links statt rechts drehen soll (heh, Zoolander):

Die gleiche Darstellung des Farbverlaufskreises wie zuvor, aber dieses Mal wird ein innerer Kreis gezeichnet, der den langen und den kurzen Weg zeigt.

Im obigen visuellen Beispiel für die Farbinterpolation werden der kurze und der lange Pfad simuliert, um den Unterschied zu veranschaulichen. Die kurze Strecke hat weniger Farbtöne, da sie so wenig wie möglich zurückgelegt wird.

Zunehmende und abnehmende Farbinterpolation

In Farbe 4 gibt es zwei weitere Strategien zur Farbinterpolation, die sich jedoch ausschließlich für zylindrische Farbräume eignen. Behalten Sie die beiden Farben aus den vorherigen Beispielen bei und zeigt die Grafik nun, wie Erhöhen und Verringern funktionieren.

Der obige Codepen verwendete ColorJS, um das erwartete Ergebnis zu demonstrieren. Um den gleichen Effekt ohne JavaScript-Bibliothek zu erzielen, würden Sie den folgenden CSS-Code schreiben:

.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%)
  );
}

Zum Beenden der Farbinterpolation können Sie den Farbton zwischen zwei Farbstopps ändern und sehen, wie sich die Farbinterpolation auswirkt und wie Farbräume die Farbverlaufsergebnisse verändern. Die Effekte können sehr unterschiedlich sein. Betrachten Sie das als vier neue Tricks in Ihrem Farbwerkzeuggürtel.

Farbverläufe in verschiedenen Farbräumen

Jeder Farbraum führt aufgrund seiner eindeutigen Form und Farbanordnung zu einem anderen Farbverlauf. Sehen Sie sich die folgenden Beispiele an, insbesondere von „Blau zu Weiß“. Sehen Sie sich an, wie dies in den einzelnen Farbräumen anders behandelt wird. Wie viele in der Mitte werden lila dargestellt. Dies wird während der Interpolation als Farbtonverschiebung bezeichnet.

Sie können die Codepen-Demo nicht sehen?

Screenshot des festgelegten Blau-Weiß-Farbverlaufs.

Das gezeigte Bild ist nur eines von vielen Beispielen aus dem Codepen. Es lohnt sich, Canary oder Safari Tech Preview auszuprobieren, um sie selbst zu sehen.

Einige Farbverläufe in diesen Bereichen sind lebhafter als andere oder passieren weniger tote Zonen. Bereiche wie lab fassen Farben so zusammen, dass sie für die Sättigung optimiert sind, im Gegensatz zu Bereichen, in denen Menschen Farben in hwb() schreiben können.

.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));
}

Die obige Demo zeigt zwar subtile Ergebnisse, zeigt aber eine konsistentere Interpolation mit dem Lab. Die Syntax von Lab ist nicht einfach zu lesen. Es gibt negative Zahlen, die von rgb oder hsl noch nicht vertraut sind. Gute Neuigkeiten: Wir können hwb für eine vertraute Syntax verwenden, aber darum bitten, dass der Farbverlauf vollständig in einem anderen Farbraum wie Oklab interpoliert wird.

.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%));
}

Sie können die Codepen-Demo nicht sehen?

Zwei Farbverläufe sind gestapelt, um einen Vergleich zu erleichtern. Der HWB-Farbverlauf ist etwas lebhafter.

In diesem Beispiel werden die gleichen Farben in HWB verwendet, aber es wird der Farbraum für die Interpolation in HWB oder Oklab angegeben. hwb ist ein großartiger Farbraum für dynamische, aber mögliche tote Zonen oder helle Flecken (siehe oben den Cyan-Hotspot). Oklab eignet sich hervorragend für wahrnehmlich lineare Farbverläufe, die gesättigt bleiben. Diese Funktion macht viel Spaß, da Sie verschiedene Farbräume ausprobieren können, um zu sehen, welchen Farbverlauf Ihnen am besten gefällt.

Hier ist ein Codepen, der mit Farbverläufen und Farbräumen sowie mit Misch- und Abgleichsstrategien experimentiert, um die Möglichkeiten zu erkunden. Sogar der Übergang von Schwarz zu Weiß ist in jedem Farbraum anders!

Sie können die Codepen-Demo nicht sehen?

Jeder Farbraum zeigt, wie er von Schwarz nach Weiß interpoliert wird, wobei jedes Ergebnis ein anderes Ergebnis liefert.

Gamut Clamping

Es gibt Szenarien, in denen eine Farbe etwas außerhalb eines Umfangs verlangt. Betrachten Sie die folgende Farbe:

rgb(300 255 255)

Das Maximum für einen Farbkanal im Farbraum rgb beträgt 255, aber hier wurde 300 für Rot angegeben. Was ändert sich? Gamut Clamping.

Bei der Einschränkung werden zusätzliche Informationen einfach entfernt. 300 wird für die Farb-Engine intern zu 255. Die Farbe wurde nun innerhalb des Raums fixiert.

Farbraum auswählen

Nachdem sie diese Farbräume und ihre Effekte kennengelernt haben, fühlen sich viele überfordert und möchten wissen, welchen Farbraum sie wählen sollen. Nach meinem Studium und meiner Erfahrung sehe ich für alle meine Aufgaben nicht den einen Farbraum. Jeder hat Momente, in denen das gewünschte Ergebnis erzielt wird.

Wenn es einen besten Bereich gäbe, gäbe es nicht so viele neue Gruppenbereiche.

Ich kann jedoch sagen, dass die CIE-Bereiche – lab, oklab, lch und oklch – meine Ausgangspunkte sind. Wenn das Ergebnis nicht das ist, was ich erwarte, teste ich andere Räume. Zum Mischen von Farben und Erstellen von Farbverläufen stimme ich der Standardspezifikation oklab zu. Was Farbsysteme und die allgemeinen Farben der Benutzeroberfläche angeht, gefällt mir oklch.

Hier sind ein paar Artikel, in denen Leute ihre aktualisierten Farbstrategien angesichts dieser neuen Farbräume und Funktionen vorgestellt haben. Beispiel: Andrey Sitnik hat alles in oklch aufgenommen. Vielleicht werden sie Sie davon überzeugen, dasselbe zu tun:

  1. OKLCH in CSS: warum wir von RGB und HSL gewechselt haben von Andrey Sitnik
  2. Color Formats von Josh W. Comeau
  3. OK, OKLCH von Chris Coyier

Zu HD-CSS-Farbe migrieren

Es gibt zwei Hauptstrategien, um die Farbe Ihres Webprojekts so zu aktualisieren, dass eine breite Farbskala angezeigt wird:

  1. Graduelle Fehlertoleranz
    Verwenden Sie die neuen Farbräume und lassen Sie Browser und Betriebssystem anhand der Anzeigefunktionen bestimmen, welche Farbe angezeigt werden soll.

  2. Progressive Verbesserung
    Verwenden Sie @supports und @media, um die Funktionen des Browsers des Nutzers zu bewerten. Wenn die Bedingungen erfüllt sind, können Sie Farben in einem breiten Spektrum verwenden.

Wenn ein Browser die display-p3-Farbe nicht erkennt:

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

Wenn ein Browser die display-p3-Farbe erkennt:

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

Beides hat Vor- und Nachteile. Hier ist eine kurze Liste der Vor- und Nachteile:

Graceful Degradation

  • Vorteile
    • Die einfachste Route.
    • Wenn keine Wide-Gamut-Anzeige verfügbar ist, verwendet der Browser eine Gamut Map oder wird an sRGB angepasst. Daher liegt die Verantwortung beim Browser.
  • Nachteile
    • Der Browser kann Gamut Clamp oder Gamut Map an eine Farbe anpassen, die Sie nicht mögen.
    • Der Browser versteht die Farbanforderung möglicherweise nicht und schlägt ganz fehl. Sie können dies jedoch umgehen, indem Sie die Farbe zweimal angeben, sodass die Kaskade auf die vorherige Farbe zurückgesetzt werden kann, die sie versteht.

Progressive Enhancement

  • Vorteile
    • Mehr Kontrolle durch die verwaltete Farbwiedergabe.
    • Eine additive Strategie, die sich nicht auf die aktuellen Farben auswirkt.
  • Nachteile
    • Sie müssen zwei separate Farbsyntaxen verwalten.
    • Sie müssen zwei verschiedene Farbgamuts verwalten.

Unterstützung von Gamut und Farbraum prüfen

Der Browser ermöglicht die Prüfung auf Unterstützung für Wide-Gamut-Funktionen und Farbsyntaxunterstützung durch CSS und JavaScript. Die genaue Farbskala des Nutzers wird nicht zur Verfügung gestellt. Es wird eine allgemeine Antwort gegeben, um die Privatsphäre der Nutzer zu wahren. Die exakte Farbraumunterstützung wird jedoch angeboten, da diese nicht spezifisch für die Funktionen der Benutzerhardware wie die Gamut ist.

Support-Anfragen für Farbgamut

In den folgenden Codebeispielen wird der Farbbereich des Besuchers auf dem Display geprüft.

Überprüfung über Preisvergleichsportal

Die am wenigsten spezifische Supportanfrage ist die Medienabfrage dynamic-range:

Unterstützte Browser

  • 98
  • 98
  • 100
  • 13.1

Quelle

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

Ungefährer oder mehr Support kann mit der color-gamut-Medienabfrage erfragt werden:

Unterstützte Browser

  • 58
  • 79
  • 110
  • 10

Quelle

@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 */
}

Es gibt zwei weitere Medienabfragen, um die Unterstützung zu prüfen:

  1. @media (color)
  2. @media (color-index)
Überprüfung über JavaScript

Bei JavaScript kann die Funktion window.matchMedia() aufgerufen und eine Medienabfrage zur Auswertung übergeben werden.

Unterstützte Browser

  • 9
  • 12
  • 6
  • 5.1

Quelle

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

Das obige Muster kann für den Rest der Medienabfragen kopiert werden.

Supportanfragen zum Farbraum

In den folgenden Codebeispielen werden der Browser des Nutzers und die Auswahl der Farbräume geprüft, mit denen er verwendet werden soll.

Überprüfung über Preisvergleichsportal

Über eine @supports-Abfrage können Sie Unterstützung für einzelne Farbräume anfordern:

Unterstützte Browser

  • 28
  • 12
  • 22
  • 9

Quelle

@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 */
}
Überprüfung über JavaScript

Bei JavaScript kann die Funktion CSS.supports() aufgerufen und ein Property-Wert-Paar übergeben werden, um festzustellen, ob der Browser die Funktion versteht.

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

Hardware- und Parsing-Prüfungen zusammenstellen

Während Sie darauf warten, dass die neuen Farbfunktionen in den einzelnen Browsern implementiert werden, sollten Sie sowohl die Hardware- als auch die Farbanalysefunktion prüfen. Dies verwende ich häufig, wenn ich Farben schrittweise auf High Definition verbessere:

: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);
  }
}

Debugging-Farbe mit Chrome-Entwicklertools

Die Chrome-Entwicklertools wurden aktualisiert und enthalten neue Tools, mit denen Entwickler HD-Farben erstellen, konvertieren und debuggen können.

Farbauswahl aktualisiert

Die Farbauswahl unterstützt jetzt alle neuen Farbräume. Autoren können so mit Kanalwerten interagieren wie sie es tun würden.

Entwicklertools mit Display-P3-Farbunterstützung

Gamutgrenzen

Außerdem wurde eine Gamut-Grenze hinzugefügt, die eine Linie zwischen den Skalen von „srgb“ und „display-p3“ zieht. Damit ist zu erkennen, in welchem Farbraum sich die ausgewählte Farbe befindet.

Entwicklertools mit einer Farbskala in der Farbauswahl

Dies erleichtert Autoren die visuelle Unterscheidung zwischen HD-Farben und Nicht-HD-Farben. Dies ist besonders hilfreich bei der Arbeit mit der color()-Funktion und den neuen Farbräumen, da damit sowohl Nicht-HD- als auch HD-Farben erzeugt werden können. Wenn Sie überprüfen möchten, in welchem Umfang Ihre Farbe ist, öffnen Sie die Farbauswahl und sehen Sie sich an!

Farben konvertieren

DevTools kann seit vielen Jahren Farben zwischen unterstützten Formaten wie HSL, HWB, RGB und Hex konvertieren. shift + click auf einem quadratischen Farbmuster im Bereich „Stile“, um diese Konvertierung durchzuführen. Die neuen Farbtools durchlaufen nicht nur Konvertierungen, sondern auch ein Pop-up, in dem Autoren die gewünschte Konvertierung sehen und auswählen können.

Bei der Konvertierung ist es wichtig zu wissen, ob die Konvertierung an den Platz angepasst wurde. In den Entwicklertools wird für die konvertierte Farbe jetzt ein Warnsymbol angezeigt, das dich auf diesen Clip zeigt.

Entwicklertools, die deine Conversions über das Gamut-Clipping mit einem Warnsymbol neben der Farbe informieren.

Weitere CSS-Debugging-Funktionen in den Entwicklertools findest du in dieser Ankündigung.

Fazit

Nicht-sRGB-Farbräume im Web befinden sich noch am Anfang, aber ich glaube, dass sie mit der Zeit immer mehr von Designern und Entwicklern verwendet werden. Zu wissen, auf welchem Farbraum ein Designsystem aufgebaut werden soll, ist für Creator beispielsweise ein sehr gutes Werkzeug. Jeder Farbraum bietet einzigartige Funktionen und einen Grund, warum er der CSS-Spezifikation hinzugefügt wurde. Es ist in Ordnung, mit diesen klein zu beginnen und sie nach Bedarf hinzuzufügen.

Viel Spaß beim Spielen mit diesen neuen Farbspielzeugen! Mehr Dynamik, einheitliche Bearbeitungen und Interpolationen sowie ein insgesamt farbenfrohes Erlebnis für die Nutzer.

Weitere Informationen

Zusätzliche Artikel zu Farbstufe 5