<input type="color">
Limited availability
This feature is not Baseline because it does not work in some of the most widely-used browsers.
<input>
Elemente vom Typ color
bieten ein Benutzerschnittstellenelement, das es einem Benutzer ermöglicht, eine Farbe entweder durch eine visuelle Farbauswahloberfläche oder durch Eingabe der Farbe in ein Textfeld im #rrggbb
-Hexadezimalformat anzugeben.
Nur grundlegende Hexadezimalfarben (ohne Alphakanal) sind erlaubt, obwohl CSS-Farben mehr Formate haben, z.B. Farbnamen, funktionale Notationen und ein Hexadezimalformat mit einem Alphakanal.
Die Darstellung des Elements kann in verschiedenen Browsern und/oder Plattformen erheblich variieren – es könnte ein einfaches Texteingabefeld sein, das automatisch validiert, um sicherzustellen, dass die Farbinformationen im richtigen Format eingegeben werden, oder ein plattformstandardmäßiger Farbwähler, oder eine Art benutzerdefiniertes Farbwählerfenster.
Probieren Sie es aus
<p>Choose your monster's colors:</p>
<div>
<input type="color" id="head" name="head" value="#e66465" />
<label for="head">Head</label>
</div>
<div>
<input type="color" id="body" name="body" value="#f6b73c" />
<label for="body">Body</label>
</div>
p,
label {
font:
1rem "Fira Sans",
sans-serif;
}
input {
margin: 0.4rem;
}
Wert
Der value
eines <input>
Elements vom Typ color
ist immer ein String, der eine 7-Zeichenfolge im Hexadezimalformat angibt. Während Sie die Farbe entweder in Groß- oder Kleinschreibung eingeben können, wird sie in Kleinbuchstaben gespeichert. Der Wert liegt nie in einer anderen Form vor und ist niemals leer.
Hinweis:
Wenn der Wert auf etwas gesetzt wird, das keine gültige, voll-opaque RGB-Farbe in Hexadezimalnotation ist, wird der Wert auf #000000
gesetzt. Insbesondere können Sie keine standardisierten Farbnamen von CSS oder eine CSS-Funktionssyntax verwenden, um den Wert zu setzen. Das ist sinnvoll, wenn man bedenkt, dass HTML und CSS separate Sprachen und Spezifikationen sind. Außerdem werden Farben mit einem Alphakanal nicht unterstützt; eine Farbe in 9-stelliger Hexadezimalnotation anzugeben (z.B. #009900aa
) führt ebenfalls dazu, dass die Farbe auf #000000
gesetzt wird.
Verwendung von Farbeingaben
Eingaben vom Typ color
sind einfach, aufgrund der begrenzten Anzahl unterstützter Attribute.
Bereitstellung einer Standardfarbe
Sie können das obige Beispiel aktualisieren, um einen Standardwert festzulegen, sodass der Farbwähler mit der Standardfarbe vorausgefüllt wird und der Farbwähler (falls vorhanden) auch auf diese Farbe voreingestellt wird:
<input type="color" value="#ff0000" />
Wenn Sie keinen Wert angeben, ist der Standard #000000
, was schwarz ist. Der Wert muss in siebenstelliger Hexadezimalnotation sein, was bedeutet, dass das "#" Zeichen von zwei Ziffern gefolgt wird, die jeweils Rot, Grün und Blau darstellen, wie folgt: #rrggbb
. Wenn Sie Farben in einem anderen Format haben (wie CSS-Farbnamen oder CSS-Farbfunktionen wie rgb()
oder hsl()
), müssen Sie diese in Hexadezimal umwandeln, bevor Sie den value
festlegen.
Verfolgen von Farbänderungen
Wie bei anderen <input>
Typen gibt es auch hier zwei Ereignisse, die verwendet werden können, um Änderungen des Farbwerts zu erkennen: input
und change
. input
wird beim <input>
Element jedes Mal ausgelöst, wenn sich die Farbe ändert. Das change
Ereignis wird ausgelöst, wenn der Benutzer den Farbwähler schließt. In beiden Fällen können Sie den neuen Wert des Elements durch Betrachten seines value
bestimmen.
Hier ist ein Beispiel, das im Laufe der Zeit Änderungen am Farbwert überwacht:
colorPicker.addEventListener("input", updateFirst, false);
colorPicker.addEventListener("change", watchColorPicker, false);
function watchColorPicker(event) {
document.querySelectorAll("p").forEach((p) => {
p.style.color = event.target.value;
});
}
Auswahl des Werts
Wenn ein Browser keine Schnittstelle zum Farbwählen unterstützt, wird seine Implementierung von Farbeingaben ein Textfeld sein, das den Inhalt automatisch validiert, um sicherzustellen, dass der Wert im korrekten Format ist. In diesem Fall können Sie die select()
Methode verwenden, um den Text im Bearbeitungsfeld auszuwählen.
Wenn der Browser stattdessen einen Farbwähler verwendet, tut select()
nichts. Sie sollten sich dieses Verhaltens bewusst sein, damit Ihr Code entsprechend reagieren kann.
colorPicker.select();
Validierung
Ein Farbinput-Wert gilt als ungültig, wenn der User Agent nicht in der Lage ist, die Benutzereingabe in siebenstellige, klein geschriebene Hexadezimalnotation umzuwandeln. Wenn dies der Fall ist, wird die :invalid
Pseudoklasse auf das Element angewendet.
Beispiel
HTML
Das HTML ist ziemlich einfach — ein paar Absätze mit beschreibendem Material mit einem <input>
vom Typ color
mit der ID color-picker
, das wir verwenden werden, um die Farbe des Textes der Absätze zu ändern.
<p>
An example demonstrating the use of the
<code><input type="color"></code> control.
</p>
<label for="color-picker">Color:</label>
<input type="color" value="#ff0000" id="color-picker" />
<p>
Watch the paragraph colors change when you adjust the color picker. As you
make changes in the color picker, the first paragraph's color changes, as a
preview (this uses the <code>input</code> event). When you close the color
picker, the <code>change</code> event fires, and we detect that to change
every paragraph to the selected color.
</p>
JavaScript
Zuerst gibt es ein bisschen Vorarbeit. Hier legen wir einige Variablen fest, indem wir eine Variable definieren, die die Farbe enthält, auf die wir den Farbwähler beim ersten Laden setzen werden, und dann einen load
Handler einrichten, um die Hauptarbeit zu erledigen, sobald die Seite vollständig geladen ist.
let colorPicker;
const defaultColor = "#0000ff";
window.addEventListener("load", startup, false);
Initialisierung
Sobald die Seite geladen ist, wird unser load
Ereignishandler, startup()
, aufgerufen:
function startup() {
colorPicker = document.querySelector("#color-picker");
colorPicker.value = defaultColor;
colorPicker.addEventListener("input", updateFirst, false);
colorPicker.addEventListener("change", updateAll, false);
colorPicker.select();
}
Dieser erhält eine Referenz zum Farbe <input>
Element in einer Variablen namens colorPicker
, dann wird der Farbinput-Wert auf den Wert in defaultColor
gesetzt. Dann wird das input
Ereignis des Farbinputs so eingerichtet, dass unsere updateFirst()
Funktion aufgerufen wird, und das change
Ereignis so, dass updateAll()
aufgerufen wird. Diese sind beide unten zu sehen.
Schließlich rufen wir select()
auf, um den Textinhalt des Farbeingabefeldes auszuwählen, falls die Steuerung als Textfeld implementiert ist (dies hat keine Wirkung, wenn stattdessen eine Farbwähler-Schnittstelle bereitgestellt wird).
Reaktion auf Farbänderungen
Wir stellen zwei Funktionen bereit, die mit Farbänderungen umgehen. Die updateFirst()
Funktion wird als Reaktion auf das input
Ereignis aufgerufen. Sie ändert die Farbe des ersten Abschnitts im Dokument, um den neuen Wert des Farbeingabefeldes widerzuspiegeln. Da input
Ereignisse jedes Mal ausgelöst werden, wenn eine Anpassung am Wert vorgenommen wird (zum Beispiel, wenn die Helligkeit der Farbe erhöht wird), passieren diese Änderungen wiederholt, während der Farbwähler verwendet wird.
function updateFirst(event) {
const p = document.querySelector("p");
if (p) {
p.style.color = event.target.value;
}
}
Wenn der Farbwähler geschlossen wird, was anzeigt, dass sich der Wert nicht mehr ändern wird (es sei denn, der Benutzer öffnet den Farbwähler erneut), wird dem Element ein change
Ereignis gesendet. Wir behandeln dieses Ereignis mit der updateAll()
Funktion, indem wir Event.target.value
verwenden, um die endgültig ausgewählte Farbe zu erhalten:
function updateAll(event) {
document.querySelectorAll("p").forEach((p) => {
p.style.color = event.target.value;
});
}
Dies setzt die Farbe jedes <p>
Blocks so, dass sein color
Attribut dem aktuellen Wert der Farbeingabe entspricht, auf die mit event.target
verwiesen wird.
Ergebnis
Das Endergebnis sieht so aus:
Technische Zusammenfassung
Wert |
Eine 7-Zeichenfolge, die ein
<color> in kleingeschriebener Hexadezimalnotation angibt
|
Ereignisse | [`change`](/de/docs/Web/API/HTMLElement/change_event) und [`input`](/de/docs/Web/API/Element/input_event) |
Unterstützte allgemeine Attribute |
autocomplete und
list
|
IDL Attribute | list und value |
DOM Schnittstelle | [`HTMLInputElement`](/de/docs/Web/API/HTMLInputElement) |
Methoden | [`select()`](/de/docs/Web/API/HTMLInputElement/select) |
Implizite ARIA Rolle | keine entsprechende Rolle |
Spezifikationen
Specification |
---|
HTML # color-state-(type=color) |