Wenm man mit CSS Farben arbeitet, ist es häufig erforderlich, die Farben von RGB nach Hex oder HSL umzuwandeln. Dazu kann man folgende Hilfsfunktionen nutzen.
Die folgenden Funktionen kann man sich hier runterladen download color.js
Diese Funktion erwartet einen CSS rgb() oder rgba() Wert und wandelt diesen in einen HEX Wert um.
function rgbaToHex(color) {
// Extrahiert Zahlen und Dezimalpunkte
var values = color.match(/[\d\.]+/g);
if (!values || values.length < 3) return "#000000" ; // R, G, B umwandeln var hex="#" + values.slice(0,
3).map(function(x) { x=parseInt(x).toString(16); return x.length===1 ? "0" + x : x; }).join(""); // Prüfen, ob
der vierte Wert (Alpha) existiert if (values[3] !==undefined) { // Alpha von 0-1 auf 0-255 skalieren var
alpha=Math.round(parseFloat(values[3]) * 255).toString(16); hex +=alpha.length===1 ? "0" + alpha : alpha; }
return hex; } // Test document.write(rgbaToHex("rgba(52, 152, 219, 0.5)")); // Ergebnis: #3498db7f
Die Funktion erwartet einen Hexwert er kann mit und ohne Alpha definiert sein. Es kann mit und ohne Rautezeichen sein. Er kann 3- oder 6-stellig sein.
function hexToRgba(hex) {
// Entferne '#' und wandle Kurzform (3/4 Stellen) in Langform (6/8 Stellen) um
hex = hex.replace('#', '');
if (hex.length === 3 || hex.length === 4) {
hex = hex.split('').map(char => char + char).join('');
}
// Extrahiere die Farbkanäle
const r = parseInt(hex.substring(0, 2), 16);
const g = parseInt(hex.substring(2, 4), 16);
const b = parseInt(hex.substring(4, 6), 16);
// Prüfe, ob ein Alpha-Kanal vorhanden ist (8 Stellen)
if (hex.length === 8) {
const aHex = parseInt(hex.substring(6, 8), 16);
const a = (aHex / 255).toFixed(2); // Umrechnung auf 0.00 bis 1.00
return `rgba(${r}, ${g}, ${b}, ${a})`;
}
// Rückgabe als normales RGB, falls kein Alpha vorhanden ist
return `rgb(${r}, ${g}, ${b})`;
}
// Testläufe:
console.log(hexToRgba("#3498db")); // "rgb(52, 152, 219)"
console.log(hexToRgba("#3498db80")); // "rgba(52, 152, 219, 0.50)" (50% Transparenz)
console.log(hexToRgba("#F00A")); // "rgba(255, 0, 0, 0.67)" (Kurzform mit Alpha)
In der folgenden Funktion können die HSL Werte auf 2 Arten ausgegeben werden. Standardmäßig werden Sie als CSS hsl() Wert ausgegeben, wenn man als zweites Argument, true eingibt, wird ein Array ausgegeben, mit den 3 Werten für h, s und l.
function rgbToHsl(rgb, ar = false) {
console.log(rgb);
// RGB String parsen
const rgbValues = rgb.match(/\d+/g);
if (!rgbValues) return null;
let r = parseInt(rgbValues[0]) / 255;
let g = parseInt(rgbValues[1]) / 255;
let b = parseInt(rgbValues[2]) / 255;
let max = Math.max(r, g, b),
min = Math.min(r, g, b);
let h,
s,
l = (max + min) / 2;
if (max === min) {
h = s = 0; // achromatisch
} else {
let d = max - min;
s = l > 0.5 ? d / (2 - max - min) : d / (max + min);
switch (max) {
case r:
h = (g - b) / d + (g < b ? 6 : 0); break; case g: h=(b - r) / d + 2; break; case b: h=(r - g) / d + 4;
break; } h /=6; } if (ar) { // Werte in HSL Format umwandeln (360 Grad, 100%, 100%) //ein Array wird
erstellt und zurück gegeben return [Math.round(h * 360), Math.round(s * 100), Math.round(l * 100)]; } else
{ return `hsl(${Math.round(h * 360)}, ${Math.round(s * 100)}%, ${Math.round(l * 100)}%)`; } }
Siehe auch eine Schritt für Schritt Anleitung wie man HSL Werte in RGB Werte umwandel: HSL to RGB
Hier werden die 3 Werte für h-Farbton, s=Säattigung, l=Lightness erwartet. Das vierte Argument, der Alphawert von 0 bis 1 ist optional.
function hslToHex(h, s, l, a = 1) {
l /= 100;
const a_inner = (s * Math.min(l, 1 - l)) / 100;
// Hilfsfunktion zur Berechnung der RGB-Kanäle
const f = n => {
const k = (n + h / 30) % 12;
const color = l - a_inner * Math.max(Math.min(k - 3, 9 - k, 1), -1);
return Math.round(255 * color).toString(16).padStart(2, '0');
};
let hex = `#${f(0)}${f(8)}${f(4)}`;
// Alpha nur anhängen, wenn es kleiner als 1 ist
if (a < 1) { const alphaHex=Math.round(a * 255).toString(16).padStart(2, '0' ); hex +=alphaHex; } return
hex; } // Beispiele: console.log(hslToHex(200, 70, 50)); // "#269dd9" (Standard: 100% Deckkraft)
console.log(hslToHex(200, 70, 50, 0.5)); // "#269dd980" (50% Transparenz)
Hier stelle ich Schritt für Schritt ein paar Möglichkeiten
vor, wie man mit Textfeldern und Buttons in Formularen die Hintergrundfarbe
ändert. Ich habe hier im Großen und Ganzen auf Erklärungen verzichtet,
da alle Themen zuvor abgehandelt wurden. Zu jedem Beispiel habe ich den Javascript
Quelltext nochmal extra beigefügt. Die Funktionen, zwischen den Script
Tags aus dem Head Bereich erscheinen jeweils oberhalb des Formulars. Der Quelltext
des Formulars steht darunter.
Die Hintergrundfarbe wird in Javascript mit folgendem Befehl geändert:
document.getElementsByTagName("body")[0].style.backgroundColor="00ff00";
Die Angabe erfolgt in Hexadezimal Werten, allerdings ohne das Gatterzeichen
(#).
Der Wert muß in jedem Fall in Anführungszeichen stehen. In einigen
Beispielen tut er das nicht, weil es sich um Zeichenketten handelt, die dynamisch
konstruiert werden oder aus Textfeldern stammen.
Der Eingabewert eines Textfeldes namens meintextfeld aus dem Formular namens
meinformular kann folgendermaßen zugewiesen werden:
document.meinformular.meintextfeld.value
Buttonklick ändert die Farbe, dann erscheint sie im Textfeld als Hexadezimalwert.
<form name="form1">
<input type="text" name="bgfarbe" size="10">
<input type="button" value="Farbe beige"
onClick="farbegreen()">
</form>
function eingabefarbe() {
document.getElementsByTagName("body")[0].style.backgroundColor=document.form2.farbfeld.value;
document.form1.bgfarbe.value=document.getElementsByTagName("body")[0].style.backgroundColor;
}
Gebe hier einen Hexadezimalwert für die Hintergrundfarbe ein, z.B.: #C0FFEE
#BACAD1 #CACCA0 #5AEFDE
Beachte, dass oben im ersten Textfeld die Farbe angezeigt wird.
<form name="form2">
<input type="text" name="farbfeld" size="10">
<input type="button" value="Hexwert eingeben"
onClick="eingabefarbe()">
</form>
function graustufen() {
var grau = document.form3.graufeld.value;
document.getElementsByTagName("body")[0].style.backgroundColor = "rgb("+ grau
+"%,"+ grau +"%, " +grau+"%)";
}
Gebe hier eine Graustufe von 1 bis 100 ein.
<form name="form3">
<input type="text" name="graufeld" size="5">
<input type="button" value="Graustufe eingeben"
onClick="graustufen()">
</form>
Erklärung:
Dieses Beispiel war vor kurzem noch eine sehr komplizierte Angelegenheit. Auch das Eingeben mittels
RGB Werten oder HSB Werten setzte ?u?erst komplizierte Berechnungen voraus. Dank der CSS3 Farbwerte ist das nun
kein Problem mehr, auch Transparenzwerte kann man hier einsetzen.
function rgbfarben() {
var rot= document.form4.rfeld.value;
var gruen = document.form4.gfeld.value;
var blau = document.form4.bfeld.value;
document.getElementsByTagName("body")[0].style.backgroundColor = "rgb("+ rot
+"%,"+ gruen +"%, " +blau+"%)";
}
Erkl?rung:
So sah die Programmierung aus, bevor mit der CSS3 Farbwertzuweisung mittels rgb eine Farbe bestimmen konnte.
function rgbfarben() {
var X = new
Array("0","1","2","3","4","5","6","7","8","9","A","B","C","D","E","F");
var r1 = 0, r2 = 0, g1 = 0, g2 = 0, b1 = 0, b2 = 0;
for(r = 0; r < document.form4.rfeld.value; r++){
r2 = r2 + 1;
if(r2 % 16 == 0) {
r2 = 0;
r1 = r1 + 1;
}
}
for(g = 0; g < document.form4.gfeld.value; g++){
g2 = g2 + 1;
if(g2 % 16 == 0) {
g2 = 0;
g1 = g1 + 1;
}
}
for(b = 0; b < document.form4.bfeld.value; b++){
b2 = b2 + 1;
if(b2 % 16 == 0) {
b2 = 0;
b1 = b1 + 1;
}
}
document.getElementsByTagName("body")[0].style.backgroundColor = X[r1] + X[r2] + X[g1] +
X[g2] + X[b1] + X[b2];
}
Gebe hier in die Farbfelder jeweils RGB-Werte von 0 bis 255 ein.
<form name="form4">
<input type="text" name="rfeld" size="5">
<input type="text" name="gfeld" size="5">
<input type="text" name="bfeld" size="5">
<input type="button" value="RGB eingeben"
onClick="rgbfarben()">
</form>
es folgt ein Linkmenue mit einer Formular Auswahlliste