range入力は「スライダーで“数値の範囲”から直感的に選んでもらう入力欄」
type="range" は、 ユーザーに「ある範囲の数値」を、スライダーを動かして選んでもらうための入力欄 です。
テキストで「50」と打ってもらう代わりに、 バーを左右に動かして「0〜100の中からどれくらい?」を選んでもらうイメージ。
音量 明るさ 評価(0〜10) サイズ調整
みたいな「数値だけど、感覚で決めたいもの」に向いています。
range入力の基本形と「min・max・step」の意味
いちばんシンプルな range入力
<input type="range" name="volume">
これだけでもスライダーは出ますが、 範囲や刻みが分かりづらいので、 実用的には min・max・step をほぼ必ず付けます。
<input
type="range"
name="volume"
min="0"
max="100"
step="1"
>
ここでの意味は、
min="0"→ 最小値は 0max="100"→ 最大値は 100step="1"→ 1 ずつ動く
ということです。
ユーザーがスライダーを動かすと、 0〜100 の整数のどれかが選ばれます。
range入力は「min〜max の間を、step刻みで動くスライダー」。 この 3 つで“このスライダーのルール”が決まる。
初期値(value)で「スタート位置」を決める
真ん中からスタートさせる例
<input
type="range"
name="volume"
min="0"
max="100"
step="1"
value="50"
>
この場合、 最初は 50 の位置にスライダーが置かれます。
「デフォルトの音量は 50」 「明るさは真ん中から」
みたいに、 ユーザーにとって自然な初期値を設定しておくと、 操作が楽になります。
range入力の値は「数値っぽいけど文字列」で来る
JavaScriptで値を読むときの基本
HTML:
<input
type="range"
id="volume"
name="volume"
min="0"
max="100"
step="1"
value="50"
>
<span id="volumeValue">50</span>
JavaScript:
const range = document.querySelector("#volume");
const display = document.querySelector("#volumeValue");
range.addEventListener("input", () => {
const value = range.value; // "50" ← 文字列
display.textContent = value;
});
JavaScriptここでのポイントは、
range.valueは「今の位置の値」- ただし型は文字列
"50"
ということです。
計算したいときは、数値に変換します。
const num = Number(range.value); // 50(数値)
JavaScriptrange入力だからといって、 JavaScript側でいきなり数値として扱えるわけではない。 “まず文字列で来る → 必要なら数値に変換”という感覚を持っておくと、バグを減らせます。
range入力+表示の“定番コンビ”を作る
スライダーと現在値をセットで見せる
HTML:
<p>音量:</p>
<input
type="range"
id="volume"
name="volume"
min="0"
max="100"
step="1"
value="50"
>
<span id="volumeValue">50</span>
JavaScript:
const range = document.querySelector("#volume");
const display = document.querySelector("#volumeValue");
range.addEventListener("input", () => {
display.textContent = range.value;
});
JavaScriptinput イベントは、 スライダーを動かしている最中にも発火します。
これで、
- スライダーを動かす
- 右側の数字がリアルタイムに変わる
という「気持ちいい UI」が作れます。
range入力は「感覚的な操作」、 隣の数字表示は「正確な値の確認」。 このセットで使うのが定番パターンです。
CSSでrange入力の見た目を軽く整える
幅を広げて“スライダー感”を出す
<input
type="range"
id="volume"
name="volume"
min="0"
max="100"
step="1"
value="50"
>
#volume {
width: 300px;
}
これだけでも、 「ちゃんとしたスライダー」っぽくなります。
ブラウザごとに細かい見た目は違いますが、 幅や位置は CSS である程度整えられます。
range入力の「意味」をちゃんと設計する
min・max・step を“適当に”決めない
例えば「明るさ」を調整するスライダーを作るとします。
<input
type="range"
name="brightness"
min="0"
max="1"
step="0.1"
value="0.5"
>
ここでの意味は、
- 0.0〜1.0 の間
- 0.1刻み
- 初期値は 0.5
です。
JavaScript側では、 この値をそのまま「割合」として使えます。
const brightness = Number(range.value); // 0.0〜1.0
JavaScriptCSSの filter: brightness() に使ったり、 計算に使ったりできます。
range入力は「ユーザーにどんな範囲・刻みで調整してほしいか」を min・max・step で設計するもの。 ここを丁寧に決めると、UIの気持ちよさが変わります。
フォーム送信と range入力:サーバー側には「選ばれた数値」が飛んでいく
普通のフォームに組み込んだ例
<form action="/settings" method="post">
<p>音量:</p>
<input
type="range"
name="volume"
min="0"
max="100"
step="1"
value="50"
>
<button type="submit">保存</button>
</form>
ユーザーが 80 までスライダーを動かして送信すると、 サーバー側にはだいたい volume = "80" という形で届きます。
サーバー側では、
- 文字列
"80"を数値 80 に変換する - 設定として保存する
という流れになります。
range入力を使うか迷ったときの判断基準
「ここは“数値だけど、感覚で調整してほしい”場面か?」
自分にこう聞いてみてください。
ここでユーザーにしてもらいたいのは、
- 正確な数値入力(例:年齢、個数)か?
- ざっくりした調整(例:音量、明るさ、サイズ)か?
正確な数値 → type="number" ざっくり調整 → type="range"
音量 明るさ ズーム率 評価(0〜10) アニメーション速度
こういったものは、 range入力の方が「触っていて気持ちいい UI」になります。
初心者として「range入力」で絶対に掴んでほしいこと
type="range" は、 「min〜max の間を、step刻みで動くスライダーで、ユーザーに数値を直感的に選んでもらう入力欄」 です。
min・max・stepで範囲と刻みを決めるvalueで初期位置を決めるinput.valueは文字列なので、計算するときは数値に変換するinputイベントで動かしている最中の値をリアルタイムに取れる- 隣に数字を表示すると「感覚+正確さ」の両方を満たせる
あなたが range入力を書くときに、 「このスライダーは“どんな範囲・刻みの数値”を、ユーザーにどんな気持ちで調整してもらうものか?」 までイメージできていたら、 もう range入力を“ただの横棒”ではなく、 “ユーザーの感覚とアプリの数値ロジックをつなぐインターフェース”として扱えている状態です。
