<input type="range">

Baseline Widely available *

This feature is well established and works across many devices and browser versions. It’s been available across browsers since March 2017.

* Some parts of this feature may have varying levels of support.

<input> Elemente des Typs range ermöglichen es dem Benutzer, einen numerischen Wert anzugeben, der nicht kleiner als ein gegebener Wert und nicht größer als ein anderer gegebener Wert sein muss. Der genaue Wert wird jedoch nicht als wichtig erachtet. Dies wird typischerweise in Form eines Schiebereglers oder einer Skalensteuerung dargestellt und nicht als Texteingabefeld wie beim number Eingabetyp.

Da diese Art von Widget ungenau ist, sollte es nur verwendet werden, wenn der genaue Wert der Steuerung nicht wichtig ist.

Probieren Sie es aus

<p>Audio settings:</p>

<div>
  <input type="range" id="volume" name="volume" min="0" max="11" />
  <label for="volume">Volume</label>
</div>

<div>
  <input
    type="range"
    id="cowbell"
    name="cowbell"
    min="0"
    max="100"
    value="90"
    step="10" />
  <label for="cowbell">Cowbell</label>
</div>
p,
label {
  font:
    1rem "Fira Sans",
    sans-serif;
}

input {
  margin: 0.4rem;
}

Wenn der Browser des Benutzers den Typ range nicht unterstützt, wird eine Rückfallebene eingesetzt, die ihn wie eine text Eingabe behandelt.

Validierung

Es gibt keine Muster-Validierung; jedoch werden die folgenden Formen der automatischen Validierung durchgeführt:

  • Wenn der value auf etwas gesetzt wird, das nicht in eine gültige Gleitkommazahl umgewandelt werden kann, schlägt die Validierung fehl, da die Eingabe fehlerhaft ist.
  • Der Wert wird nicht kleiner sein als min. Der Standardwert ist 0.
  • Der Wert wird nicht größer sein als max. Der Standardwert ist 100.
  • Der Wert wird ein Vielfaches von step sein. Der Standardwert ist 1.

Wert

Das value Attribut enthält eine Zeichenkette, die eine Zeichenkettendarstellung der ausgewählten Zahl darstellt. Der Wert ist niemals eine leere Zeichenkette (""). Der Standardwert liegt auf halbem Weg zwischen dem angegebenen Minimum und Maximum – es sei denn, das Maximum ist tatsächlich kleiner als das Minimum, in dem Fall wird der Standardwert auf den Wert des min Attributs gesetzt. Der Algorithmus zur Bestimmung des Standardwerts ist:

js
defaultValue =
  rangeElem.max < rangeElem.min
    ? rangeElem.min
    : rangeElem.min + (rangeElem.max - rangeElem.min) / 2;

Wenn versucht wird, den Wert niedriger als das Minimum einzustellen, wird er auf das Minimum gesetzt. Ebenso führt ein Versuch, den Wert höher als das Maximum zu setzen, dazu, dass er auf das Maximum gesetzt wird.

Zusätzliche Attribute

Zusätzlich zu den von allen <input> Elementen geteilten Attributen bieten Range-Eingaben die folgenden Attribute.

Hinweis: Die folgenden Eingabeattribute gelten nicht für den Eingabetyp Range: accept, alt, checked, dirname, formaction, formenctype, formmethod, formnovalidate, formtarget, height, maxlength, minlength, multiple, pattern, placeholder, readonly, required, size, und src. Jedes dieser Attribute wird, falls vorhanden, ignoriert.

list

Der Wert des list Attributs ist die id eines <datalist> Elements, das sich im selben Dokument befindet. Das <datalist> liefert eine Liste vordefinierter Werte, die dem Benutzer für diese Eingabe vorgeschlagen werden. Wertvorgaben, die mit dem type nicht kompatibel sind, werden nicht in die vorgeschlagenen Optionen aufgenommen. Die bereitgestellten Werte sind Vorschläge, keine Anforderungen: Benutzer können aus dieser vordefinierten Liste auswählen oder einen anderen Wert angeben.

Siehe das untenstehende Beispiel zum Hinzufügen von Markierungen, um zu sehen, wie Optionen bei einer Range in unterstützten Browsern angezeigt werden.

max

Der größte Wert im Bereich der zulässigen Werte. Wenn der in das Element eingegebene value diesen übersteigt, scheitert das Element an der Constraint-Validierung. Wenn der Wert des max Attributs keine Zahl ist, dann hat das Element keinen Höchstwert.

Dieser Wert muss größer oder gleich dem Wert des min Attributs sein. Siehe das HTML max Attribut.

min

Der kleinste Wert im Bereich der zulässigen Werte. Wenn der value des Elements weniger als dies beträgt, scheitert das Element an der Constraint-Validierung. Wenn ein Wert für min angegeben ist, der keine gültige Zahl ist, hat die Eingabe keinen Mindestwert.

Dieser Wert muss kleiner oder gleich dem Wert des max Attributs sein. Siehe das HTML min Attribut.

Hinweis: Wenn die min und max Werte gleich sind oder der max Wert niedriger ist als der min Wert, kann der Benutzer nicht mit der Range interagieren.

step

Das step Attribut ist eine Zahl, die die Feinheit festlegt, der der Wert entsprechen muss. Nur Werte, die dem angegebenen Schrittintervall entsprechen (min falls angegeben, value andernfalls, oder ein entsprechender Standardwert, wenn keiner von diesen angegeben ist), sind gültig.

Das step Attribut kann auch auf den any Zeichenkettenwert gesetzt werden. Dieser step Wert bedeutet, dass kein Schrittintervall impliziert wird und jeder Wert im angegebenen Bereich zulässig ist (vorbehaltlich anderer Einschränkungen, wie min und max). Siehe das Beispiel Setzen von step auf den any Wert, um zu sehen, wie dies in unterstützten Browsern funktioniert.

Hinweis: Wenn der vom Benutzer eingegebene Wert nicht der Schritteinstellung entspricht, kann der Benutzeragent den Wert auf den nächsten gültigen Wert runden, wobei bevorzugt wird, auf höhere Zahlen zu runden, wenn es zwei gleich nahe Optionen gibt.

Der Standardwert für Schritte bei range Eingaben ist 1, sodass nur ganze Zahlen eingegeben werden können, es sei denn, die Basisschritte sind keine ganze Zahl; beispielsweise, wenn Sie min auf -10 und value auf 1.5 setzen, dann erlaubt ein step von 1 nur Werte wie 1.5, 2.5, 3.5,… in positiver Richtung und -0.5, -1.5, -2.5,… in negativer Richtung. Siehe das HTML step Attribut.

Nicht-standardisierte Attribute

orient

Ähnlich wie die nicht standardisierte CSS-Eigenschaft -moz-orient, die die <progress> und <meter> Elemente beeinflusst, definiert das orient Attribut die Ausrichtung des Range-Schiebereglers. Zu den Werten gehören horizontal, was bedeutet, dass die Range horizontal gerendert wird, und vertical, wo die Range vertikal gerendert wird.

Beispiele

Während der number Typ es den Benutzern ermöglicht, eine Zahl mit optionalen Einschränkungen einzugeben, die ihren Wert zwischen einem Minimum und einem Maximum erzwingen, erfordert er, dass sie einen spezifischen Wert eingeben. Der range Eingabetyp erlaubt es Ihnen, den Benutzer nach einem Wert zu fragen, in Fällen, in denen es dem Benutzer möglicherweise egal ist – oder er nicht weiß – welcher spezifische numerische Wert ausgewählt ist.

Einige Beispiele für Situationen, in denen Range-Eingaben häufig verwendet werden:

  • Audiosteuerungen wie Lautstärke und Balance oder Filtersteuerungen.
  • Farbeinstellungen wie Farbkanäle, Transparenz, Helligkeit usw.
  • Spieleinstellungen wie Schwierigkeit, Sichtbarkeitsabstand, Weltengröße usw.
  • Passwortlänge für die von einem Passwortmanager generierten Passwörter.

Generell gilt: Wenn der Benutzer eher am prozentualen Abstand zwischen den Minimal- und Maximalwerten interessiert ist als an der tatsächlichen Zahl, ist eine Range-Eingabe ausgezeichnet geeignet. Zum Beispiel denkt man bei der Lautstärkeregelung eines Heim-Stereosystems typischerweise an "Lautstärke auf halbem Weg zum Maximum einstellen" anstatt "Lautstärke auf 0,5 einstellen".

Das Minimum und Maximum angeben

Standardmäßig ist das Minimum 0 und das Maximum 100. Wenn das nicht dem entspricht, was Sie möchten, können Sie leicht andere Grenzen festlegen, indem Sie die Werte der min und/oder max Attribute ändern. Diese können jeden Gleitkommawert annehmen.

Zum Beispiel, um den Benutzer nach einem Wert zwischen -10 und 10 zu fragen, können Sie:

html
<input type="range" min="-10" max="10" />

Die Granularität des Wertes festlegen

Standardmäßig beträgt die Granularität 1, was bedeutet, dass der Wert immer eine ganze Zahl ist. Um die Granularität zu steuern, können Sie das step Attribut ändern. Zum Beispiel, wenn Sie einen Wert benötigen, der sich auf halbem Weg zwischen 5 und 10 befindet, sollten Sie den Wert von step auf 0,5 setzen:

Das step Attribut festlegen

html
<input type="range" min="5" max="10" step="0.5" />

Schritt auf any setzen

Wenn Sie jeden Wert unabhängig von der Anzahl der Dezimalstellen akzeptieren möchten, können Sie für das step Attribut einen Wert von any angeben:

HTML
html
<input id="pi_input" type="range" min="0" max="3.14" step="any" />
<p>Value: <output id="value"></output></p>
JavaScript
js
const value = document.querySelector("#value");
const input = document.querySelector("#pi_input");
value.textContent = input.value;
input.addEventListener("input", (event) => {
  value.textContent = event.target.value;
});

Dieses Beispiel ermöglicht es dem Benutzer, jeden Wert zwischen 0 und π auszuwählen, ohne Einschränkungen bei dem Bruchteil des ausgewählten Wertes. JavaScript wird verwendet, um zu zeigen, wie sich der Wert ändert, während der Benutzer mit dem Range interagiert.

Markierungen hinzufügen

Um Markierungen zu einer Range-Steuerung hinzuzufügen, fügen Sie das list Attribut hinzu und geben Sie ihm die id eines <datalist> Elements, das eine Reihe von Markierungen auf der Steuerung definiert. Jeder Punkt wird mit einem <option> Element dargestellt, dessen value auf den Wert der Range gesetzt ist, an dem eine Markierung gezeichnet werden soll.

HTML

html
<label for="temp">Choose a comfortable temperature:</label><br />
<input type="range" id="temp" name="temp" list="markers" />

<datalist id="markers">
  <option value="0"></option>
  <option value="25"></option>
  <option value="50"></option>
  <option value="75"></option>
  <option value="100"></option>
</datalist>

Ergebnis

Dieselbe Datalist für mehrere Range-Steuerungen verwenden

Um Ihnen das Wiederholen von Code zu ersparen, können Sie dieselbe <datalist> für mehrere <input type="range"> Elemente und andere <input> Typen wiederverwenden.

Hinweis: Wenn Sie auch die Labels anzeigen möchten, wie im untenstehenden Beispiel, dann benötigen Sie eine eigene datalist für jedes Range-Eingabefeld.

HTML

html
<p>
  <label for="temp1">Temperature for room 1:</label>
  <input type="range" id="temp1" name="temp1" list="values" />
</p>
<p>
  <label for="temp2">Temperature for room 2:</label>
  <input type="range" id="temp2" name="temp2" list="values" />
</p>

<p>
  <label for="temp3">Temperature for room 3:</label>
  <input type="range" id="temp3" name="temp3" list="values" />
</p>

<datalist id="values">
  <option value="0" label="0"></option>
  <option value="25" label="25"></option>
  <option value="50" label="50"></option>
  <option value="75" label="75"></option>
  <option value="100" label="100"></option>
</datalist>

Ergebnis

Labels hinzufügen

Sie können Markierungen beschriften, indem Sie den <option> Elementen label Attribute hinzufügen. Der Inhalt des Labels wird jedoch standardmäßig nicht angezeigt. Sie können CSS verwenden, um die Labels anzuzeigen und sie korrekt zu positionieren. Hier ist eine Möglichkeit, wie Sie dies tun könnten.

HTML

html
<label for="tempB">Choose a comfortable temperature:</label><br />
<input type="range" id="tempB" name="temp" list="values" />

<datalist id="values">
  <option value="0" label="very cold!"></option>
  <option value="25" label="cool"></option>
  <option value="50" label="medium"></option>
  <option value="75" label="getting warm!"></option>
  <option value="100" label="hot!"></option>
</datalist>

CSS

css
datalist {
  display: flex;
  flex-direction: column;
  justify-content: space-between;
  writing-mode: vertical-lr;
  width: 200px;
}

option {
  padding: 0;
}

input[type="range"] {
  width: 200px;
  margin: 0;
}

Ergebnis

Vertikale Range-Steuerungen erstellen

Standardmäßig rendern Browser Range-Eingaben als Schieberegler, bei denen der Knopf nach links und rechts gleitet.

Um eine vertikale Range zu erstellen, bei der der Knopf nach oben und unten gleitet, setzen Sie die writing-mode Eigenschaft mit einem Wert von entweder vertical-rl oder vertical-lr:

css
input[type="range"] {
  writing-mode: vertical-lr;
}

Dadurch wird der Range-Schieberegler vertikal dargestellt:

Sie können auch die CSS appearance Eigenschaft auf den nicht standardmäßigen Wert slider-vertical setzen, wenn Sie ältere Versionen von Chrome und Safari unterstützen möchten, und das nicht standardmäßige orient="vertical" Attribut hinzufügen, um ältere Versionen von Firefox zu unterstützen.

Siehe Erstellen von vertikalen Formularsteuerelementen für Beispiele.

Technische Zusammenfassung

Wert Eine Zeichenkette, die die Zeichenkettenrepräsentation des ausgewählten numerischen Wertes enthält; verwenden Sie [`valueAsNumber`](/de/docs/Web/API/HTMLInputElement/valueAsNumber), um den Wert als Zahl zu erhalten.
Ereignisse [`change`](/de/docs/Web/API/HTMLElement/change_event) und [`input`](/de/docs/Web/API/Element/input_event)
Unterstützte gemeinsame Attribute autocomplete, list, max, min, step
IDL-Attribute list, value, valueAsNumber
DOM-Schnittstelle

[`HTMLInputElement`](/de/docs/Web/API/HTMLInputElement)

Methoden [`stepDown()`](/de/docs/Web/API/HTMLInputElement/stepDown) und [`stepUp()`](/de/docs/Web/API/HTMLInputElement/stepUp)
Implizite ARIA-Rolle slider

Spezifikationen

Specification
HTML
# range-state-(type=range)

Browser-Kompatibilität

BCD tables only load in the browser

Siehe auch