Dieser Artikel ist Teil einer Serie:
Moderne Browser lassen uns nicht nur Schatteneffekte für Texte mit CSS zaubern, sondern sie führen auch zwei neue Möglichkeiten der Farbangabe an. Altbekannt sind die hexadezimale Schreibweise im Stile von #FF000
, die RGB-Angabe rgb(255,0,0)
oder auch der Farbname (z.B. red
). Neuere Versionen von Firefox Opera und Safari können aber noch mehr als das: Sie wissen was RGBA, HSL und HSLA bedeuten.
Was bedeutet das A in RGBA und HSLA?
Das A steht für Alphakanal, also einen zusätzliche Angabe, der die Deckkraft einer Farbe regelt. Bei Farbangaben in RGBA und HSLA ist es also möglich, der Farbe direkt Teiltransparenz mitzugeben; mit der alten hexadezimalen Farbdefinition haben wir diese Möglichkeit nicht. Da könnte man höchstens versuchen, ganze HTML-Elemente mittels opacity
transparent zu machen, aber das will man ja nicht immer. Das A in RGBA und HSLA ist also eine durchaus interessante Option.
Wie benutzt man RGBA?
RGBA-Angaben notiert man im Prinzip genau wie einen RGB-Wert, nur hängt man als letzten Wert eine Deckkraft zwischen 0 und 1 an. Beispiel:
.rot_transparent {
color:rgba(255, 0, 0, 0.25);
}
Das funktioniert bei allen Farbangaben gleich, egal ob für Textfarbe, Hintergrund oder Border.
Und was bedeutet HSL?
HSL ist, vereinfacht gesagt, eine andere Möglichkeit, Farbwerte auszudrücken. Die drei Buchstaben stehen für Hue, Saturation, Luminance (Farbton, Sättigung, Helligkeit) und machen das manuelle Justieren von Farben um einiges leichter als andere Modelle. Will man beispielsweise in RGB eine Farbe abdunkeln, muss man zwei Werte bearbeiten, bei HSL braucht man nur an einem, am Helligkeitswert zu drehen.
Für genauere Informationen sei der Wikipedia-Artikel zum HSV-Farbraum empfohlen (HSL ist eine Variante von HSV).
Wie benutzt man HSL(A)?
HSLA benutzt man im Prinzip genau wie RGBA, wobei die H zwischen 0 und 360 zu liegen hat und die Werte S und L als Prozente anzugeben sind. Beispiel für HSL:
.hsl_gruen {
color:hsl(120, 100%, 50%);
}
Für HSLA hängt man wie bei RGBA einen einen Alphawert zwischen 1 und 0 an:
.hsl_gruen_transparent {
color:hsla(120, 100%, 50%, 0.25);
}
Auch hier gilt: sowohl Texte als auch Hintergründe und Rahmen lassen sich gleichermaßen mit HSL(A) einfärben.
Welche Browser können etwas mit RGBA und HSL(A) anfangen?
Firefox 3 und der aktuelle Safari verstehen RGBA, HSL und HSLA problemlos, in Opera funktioniert zumindest HSL. Im Internet Explorer, wen wundert es, funktioniert gar nichts von all dem.
Dieser etwas löchrige Support muss kein (großes) Problem sein, denn es gibt auch hier die Möglichkeit progressive enhancement anzuwenden. Für den IE kann man mit CSS-Hacks oder Conditional Comments ein Fallback definieren und auch für Opera gibt es passende Hacks. Wenn modernes HSLA-Grün nicht funktioniert, bekommen die Nutzer von Opera und Internet Explorer eben normales RGB-Grün vorgesetzt und alles läuft wie gehabt.
Dann wollen wir alle mal anfangen und an HSL zu gewöhnen …
Kommentare (9)
Herr Gabriel ¶
4. Juli 2008, 15:23 Uhr
Sind wir dann immernoch auf "Websichere Farben" angewiesen?
Peter ¶
4. Juli 2008, 15:27 Uhr
Zitat Herr Gabriel:
Nicht mehr. Wir leben in einer Welt, in der jedes Display 16 Bit oder mehr kann.
soophie ¶
4. Juli 2008, 15:29 Uhr
find ich richtig gut. Mich nervt es immer, wenn ich Boxen übereinander legen muss, weil der Hintergrund teilweise transparent ist und der Text opak drauf liegen soll. aber ich würde/werde nur RGBA nutzen, da RGB nun einfach mal auf dem Monitorfarbmodus beruht.
@Herr Gabriel: Ich fasse das als Ironie auf? Da nicht mal mehr Handys auf websichere Farben angewiesen sind, kann man diese getrost zum alten Eisen legen.
dopefish ¶
5. Juli 2008, 12:37 Uhr
Es ist für die Anzeige doch egal welchen Befehl du verwendest. Der Browser rechnet es sowieso in RGB um.
HSL liegt einfach näher am menschlichen Farbverständnis.
Also in meinem Photoshop benutze ich nur noch die HSL Farbwahl und darum freue ich mich über diese Funktion.
Das A ist auch praktisch.
Mathias Karstädt ¶
7. Juli 2008, 16:07 Uhr
Danke für den Hinweis. War mir bist jetzt noch nicht bekannt.
Die naheliegendste Anwendungsmöglichkeit ist hier sicherlich, damit Mousover Effekte bei Links zu definieren. Man muss nicht mehr umständlich nach einer passenden Farbe suchen, sondern kann einfach eine Transparenz der Farbe verwenden. Cool.
Peter ¶
6. August 2008, 13:49 Uhr
Mir fiel gerade auf, dass HSL in der Welt der Javascript-Frameworks noch nicht angekommen ist. Das wäre also ein weiterer Grund, für’s erste bei Hex und RGB zu bleiben.
Thorsten ¶
16. Januar 2010, 20:46 Uhr
In http://www.peterkroener.de/test/neue-farben.html
Der IE-Fallback sieht nicht anders als die Standard-Methode. War sicher ein Vertipper. Wäre schön, den richtigen Fallback zu sehen. Danke!
Peter ¶
17. Januar 2010, 15:29 Uhr
Ups! Danke für den Tipp, hab den IE-Fallback nachgetragen. Das ist halt einfach eine normale, nicht -transparente Farbe, vor der HSLA-Angabe notiert.
Thorsten ¶
17. Januar 2010, 19:38 Uhr
Zitat Peter:
...oder wie im Beispiel danach per [if IE]. Es ist auf alle Fälle sinnvoll, das zu demonstrieren, z.B. um zu verdeutlichen, dass das IE-Verhalten hier anders ist als bei RGBA. Dort braucht man für IE schließlich keinen Fallback, zumindest wenn die gewählte Farbe ohne Transparenz akzeptabel ist. Danke nochmals!