rgb()
Baseline
Widely available
*
This feature is well established and works across many devices and browser versions. It’s been available across browsers since Juli 2015.
* Some parts of this feature may have varying levels of support.
Hinweis:
Die rgba() Funktionsnotation ist ein Alias für rgb(). Sie sind genau identisch. Es wird empfohlen, rgb() zu verwenden.
Die rgb() Funktionsnotation drückt eine Farbe im sRGB Farbraum entsprechend ihrer roten, grünen und blauen Komponenten aus. Eine optionale Alpha-Komponente stellt die Transparenz der Farbe dar.
Probieren Sie es aus
background: rgb(31 120 50);
background: rgb(30% 20% 50%);
background: rgb(255 122 127 / 80%);
background: rgb(255 122 127 / 0.2);
<section id="default-example">
<div class="transition-all" id="example-element"></div>
</section>
#example-element {
min-width: 100%;
min-height: 100%;
padding: 10%;
}
Syntax
/* Absolute values */
rgb(255 255 255)
rgb(255 255 255 / 50%)
/* Relative values */
rgb(from green r g b / 0.5)
rgb(from #123456 calc(r + 40) calc(g + 40) b)
rgb(from hwb(120deg 10% 20%) r g calc(b + 200))
/* Legacy 'rgba()' alias */
rgba(0 255 255)
/* Legacy format */
rgb(0, 255, 255)
rgb(0, 255, 255, 50%)
Hinweis:
Aus Kompatibilitätsgründen werden Web-API-serialisierte Farbwerte als rgb()-Farben ausgedrückt, wenn der Alpha-Kanal-Wert genau 1 ist, und als rgba()-Farben andernfalls. In beiden Fällen wird die alte Syntax verwendet, mit Kommas als Trennzeichen (zum Beispiel rgb(255, 0, 0)).
Werte
Nachfolgend sind die Beschreibungen der zulässigen Werte für sowohl absolute als auch relative Farben aufgeführt.
Absolute Wertsyntax
rgb(R G B[ / A])
Die Parameter sind wie folgt:
R,G,B-
Jeder Wert kann als
<number>zwischen0und255, als<percentage>zwischen0%und100%oder als Schlüsselwortnone(in diesem Fall gleichbedeutend mit0%) dargestellt werden. Diese Werte repräsentieren die roten, grünen und blauen Kanäle. AOptional-
Ein
<alpha-value>, das den Alpha-Kanal-Wert der Farbe repräsentiert, wobei die Zahl00%(vollständig transparent) und1100%(vollständig undurchsichtig) entspricht. Außerdem kann das Schlüsselwortnoneverwendet werden, um explizit kein Alpha-Kanal anzugeben. Wenn derA-Kanalwert nicht explizit angegeben ist, wird er standardmäßig auf 100% gesetzt. Falls enthalten, wird der Wert durch einen Schrägstrich (/) angeführt.
Hinweis:
Weitere Informationen zu den Auswirkungen von none finden Sie unter Fehlende Farbkomponenten.
Relative Wertsyntax
rgb(from <color> R G B[ / A])
Die Parameter sind wie folgt:
from <color>-
Das Schlüsselwort
fromist immer enthalten, wenn eine relative Farbe definiert wird, gefolgt von einem<color>-Wert, der die Ursprungsfarbe darstellt: Dies ist die Originalfarbe, auf der die relative Farbe basiert. Die Ursprungsfarbe kann jede gültige<color>-Syntax sein, einschließlich einer anderen relativen Farbe. R,G,B-
Jeder Wert kann als
<number>zwischen0und255, als<percentage>zwischen0%und100%oder als Schlüsselwortnone(in diesem Fall gleichbedeutend mit0%) dargestellt werden. Diese Werte repräsentieren die roten, grünen und blauen Kanalwerte der Ausgabefarbe. AOptional-
Ein
<alpha-value>, das den Alpha-Kanal-Wert der Ausgabefarbe repräsentiert, wobei die Zahl00%(vollständig transparent) und1100%(vollständig undurchsichtig) entspricht. Außerdem kann das Schlüsselwortnoneverwendet werden, um explizit keinen Alpha-Kanal anzugeben. Wenn derA-Kanalwert nicht explizit angegeben ist, wird er standardmäßig auf den Alpha-Kanalwert der Ursprungsfarbe gesetzt. Falls enthalten, wird der Wert durch einen Schrägstrich (/) angeführt.
Hinweis:
Um die vollständige Darstellung des sichtbaren Farbspektrums zu ermöglichen, wird die Ausgabe der relativen rgb()-Farbensyntax als color(srgb) serialisiert. Das bedeutet, dass beim Abfragen des Ausgabefarbwerts über die HTMLElement.style-Eigenschaft oder die CSSStyleDeclaration.getPropertyValue()-Methode der Ausgabefarbwert als color(srgb ...)-Wert zurückgegeben wird.
Definieren der Kanalkomponenten der relativen Farbenausgabe
Beim Verwenden der relativen Farbensyntax innerhalb einer rgb()-Funktion wandelt der Browser die Ursprungsfarbe in eine äquivalente RGB-Farbe um (falls sie nicht bereits als solche angegeben wurde). Die Farbe wird als drei unterschiedliche Farbkanalwerte definiert — r (rot), g (grün) und b (blau) — sowie einem Alpha-Kanal-Wert (alpha). Diese Kanalwerte stehen innerhalb der Funktion zur Verfügung, um zur Definition der Kanalausgabewerte verwendet zu werden:
- Die
r-,g- undb-Werte werden jeweils zu<number>-Werten zwischen0und255aufgelöst. - Der
alpha-Kanal wird zu einem<number>zwischen0und1aufgelöst.
Beim Definieren einer relativen Farbe können die verschiedenen Kanäle der Ausgabefarbe auf mehrere verschiedene Weisen ausgedrückt werden. Im Folgenden werden wir einige Beispiele studieren, um diese zu veranschaulichen.
In den ersten beiden Beispielen verwenden wir die relative Farbsyntax. Allerdings gibt das erste Beispiel die gleiche Farbe wie die Ursprungsfarbe aus, und das zweite Beispiel gibt eine Farbe aus, die überhaupt nicht auf der Ursprungsfarbe basiert. Tatsächlich erstellen sie keine relativen Farben! Sie würden diese wahrscheinlich in einem echten Codebasis nie verwenden und stattdessen nur einen absoluten Farbwert verwenden. Wir haben diese Beispiele als Ausgangspunkt zum Erlernen der relativen rgb()-Syntax aufgenommen.
Beginnen wir mit einer Ursprungsfarbe von hsl(0 100% 50%) (äquivalent zu rgb(255 0 0)). Die folgende Funktion gibt die gleiche Farbe wie die Ursprungsfarbe aus — sie verwendet die r-, g- und b-Kanalwerte der Ursprungsfarbe (255, 0 und 0) als die Ausgabekanäle:
rgb(from hsl(0 100% 50%) r g b)
Die Ausgabe dieser Funktion ist das sRGB-Äquivalent von color() rgb(255 0 0): color(srgb 1 0 0).
Die nächste Funktion verwendet absolute Werte für die Ausgabekanäle und gibt eine vollständig andere Farbe aus, die nicht auf der Ursprungsfarbe basiert:
rgb(from hsl(0 100% 50%) 132 132 224)
In diesem Fall ist die Ausgabefarbe das sRGB-Äquivalent von rgb(132 132 224): color(srgb 0.517647 0.517647 0.878431).
Die folgende Funktion erstellt eine relative Farbe basierend auf der Ursprungsfarbe:
rgb(from hsl(0 100% 50%) r 80 80)
Dieses Beispiel:
- Wandelt die Ursprungsfarbe (
hsl(0 100% 50%)) in ein äquivalentesrgb()um (rgb(255 0 0)). - Setzt den
R-Kanalwert für die Ausgabefarbe auf denR-Kanalwert desrgb()-Äquivalents der Ursprungsfarbe —255. - Setzt die
G- undB-Kanalwerte der Ausgabefarbe auf neue Werte, die nicht auf der Ursprungsfarbe basieren: Jeweils80und80.
Die finale Ausgabefarbe ist das Äquivalent von rgb(255 80 80) im sRGB-Farbraum — color(srgb 1 0.313726 0.313726).
Hinweis: Wie oben erwähnt, wenn die Ausgabefarbe ein anderes Farbmodell als die Ursprungsfarbe verwendet, wird die Ursprungsfarbe im Hintergrund in dasselbe Modell oder denselben Raum wie die Ausgabefarbe umgewandelt, sodass sie in einer Weise dargestellt werden kann, die kompatibel ist (d.h. mit denselben Kanälen).
In den Beispielen, die wir in diesem Abschnitt bisher gesehen haben, wurden die Alpha-Kanäle weder für die Ursprungsfarbe noch für die Ausgabefarbe explizit angegeben. Wenn der Alpha-Kanal der Ausgabefarbe nicht angegeben ist, wird er standardmäßig auf denselben Wert wie der Alpha-Kanal der Ursprungsfarbe gesetzt. Wenn der Alpha-Kanal der Ursprungsfarbe nicht angegeben ist (und es sich nicht um eine relative Farbe handelt), wird er standardmäßig auf 1 gesetzt. In den obigen Beispielen sind also die Alpha-Kanal-Werte der Ursprungs- und Ausgabefarbe 1.
Lassen Sie uns einige Beispiele betrachten, die die Alpha-Kanal-Werte der Ursprungs- und Ausgabefarbe angeben. Das erste Beispiel gibt den gleichen Alpha-Kanal-Wert für die Ausgabefarbe an wie für die Ursprungsfarbe, während das zweite einen anderen Alpha-Kanal-Wert für die Ausgabefarbe angibt, ohne Bezug auf den Alpha-Kanal der Ursprungsfarbe.
rgb(from hsl(0 100% 50% / 0.8) r g b / alpha)
/* Computed output color: color(srgb 1 0 0 / 0.8) */
rgb(from hsl(0 100% 50% / 0.8) r g b / 0.5)
/* Computed output color: color(srgb 1 0 0 / 0.5) */
Im folgenden Beispiel wird die hsl()-Ursprungsfarbe erneut in eine rgb()-Darstellung umgewandelt — rgb(255 0 0). calc()-Berechnungen werden auf die R, G, B und A-Werte angewendet. Nach den Berechnungen sind die R-, G-, B- und A-Werte 127.5, 25, 175 bzw. 0.9. Die finale Ausgabefarbe ist das Äquivalent von rgb(127.5 25 175 / 0.9) im sRGB-Farbraum: color(srgb 0.5 0.0980392 0.686275 / 0.9).
rgb(from hsl(0 100% 50%) calc(r/2) calc(g + 25) calc(b + 175) / calc(alpha - 0.1))
Hinweis:
Da die Kanalwerte der Ursprungsfarbe zu <number>-Werten aufgelöst werden, müssen Sie Zahlen hinzufügen, wenn Sie sie in Berechnungen verwenden, auch in Fällen, in denen ein Kanal normalerweise <percentage>, <angle> oder andere Werttypen akzeptieren würde. Zum Beispiel funktioniert es nicht, ein <percentage> zu einem <number> hinzuzufügen.
Formale Syntax
<rgb()> =
<legacy-rgb-syntax> |
<modern-rgb-syntax>
<legacy-rgb-syntax> =
rgb( <percentage>#{3} , <alpha-value>? ) |
rgb( <number>#{3} , <alpha-value>? )
<modern-rgb-syntax> =
rgb( [ from <color> ]? [ <number> | <percentage> | none ]{3} [ / [ <alpha-value> | none ] ]? )
<alpha-value> =
<number> |
<percentage>
Beispiele
>Grundsyntax
In diesem Beispiel haben wir drei <div>-Elemente mit unterschiedlichen Hintergrundfarben, die über einem gestreiften Hintergrund angezeigt werden.
HTML
<div>
<div id="integer"></div>
<div id="percent"></div>
<div id="alpha"></div>
</div>
CSS
Die Hintergrundfarben werden mit der rgb()-Farbfunktion gesetzt. Die drei Farben sind gleich. Die dritte ist halbtransparent, daher haben wir einen repeating-linear-gradient() auf dem <body> hinzugefügt, um die Transparenz von Alpha-Kanälen besser zu demonstrieren.
body {
background: repeating-linear-gradient(-45deg, #eeeeee 0 2px, white 2px 6px);
padding: 10px;
}
#integer {
background-color: rgb(189 85 218);
}
#percent {
background-color: rgb(74% 33% 85%);
}
#alpha {
background-color: rgb(189 85 218 / 0.25);
}
Ergebnis
Verwendung relativer Farben mit rgb()
Dieses Beispiel gestaltet drei <div>-Elemente mit unterschiedlichen Hintergrundfarben. Das linke erhält die unveränderte --base-color, während die mittleren und rechten Varianten dieser --base-color erhalten, bei denen sukzessive mehr aus dem roten Kanal entfernt und mehr zum blauen Kanal hinzugefügt wird.
Diese Varianten werden unter Verwendung von relativen Farben definiert — die benutzerdefinierte Eigenschaft --base-color wird in eine rgb()-Funktion eingefügt, und die Ausgabefarbe hat ihren roten und blauen Kanal über calc()-Funktionen modifiziert, während der grüne Kanal unverändert bleibt.
CSS
:root {
--base-color: orange;
/* equal to rgb(255 165 0) */
}
#one {
background-color: var(--base-color);
}
#two {
background-color: rgb(from var(--base-color) calc(r - 76.5) g calc(b + 76.5));
/* 76.5 is 30% of 255 */
}
#three {
background-color: rgb(from var(--base-color) calc(r - 153) g calc(b + 153));
/* 153 is 60% of 255 */
}
/* Use @supports to add in support for old syntax that requires r g b values to
be specified as percentages (with units) in calculations. This is required
for Safari 16.4+. */
@supports (color: rgb(from red r g calc(b + 30%))) {
#two {
background-color: rgb(from var(--base-color) calc(r - 30%) g calc(b + 30%));
}
#three {
background-color: rgb(from var(--base-color) calc(r - 60%) g calc(b + 60%));
}
}
Ergebnis
Alte Syntax: durch Kommas getrennte Werte
Aus Kompatibilitätsgründen akzeptiert die rgb()-Funktion eine Form, bei der alle Werte durch Kommas getrennt sind.
HTML
<div class="space-separated"></div>
<div class="comma-separated"></div>
CSS
div {
width: 100px;
height: 50px;
margin: 1rem;
}
div.space-separated {
background-color: rgb(255 0 0 / 50%);
}
div.comma-separated {
background-color: rgb(255, 0, 0, 0.5);
}
Ergebnis
Spezifikationen
| Specification |
|---|
| CSS Color Module Level 5> # relative-RGB> |
| CSS Color Module Level 4> # rgb-functions> |
Browser-Kompatibilität
Siehe auch
- Der
<color>Datentyp für eine Liste aller Farbnotationen - Tool zum Konvertieren von Farbformaten
- Verwendung relativer Farben
- CSS-Farben Modul