コンテンツにスキップ

スライダー

hc-slider はネイティブの <input type="range"> に適用します。 キーボードナビゲーション(←/→、Home、End、PageUp、PageDown)、 フォームへの参加、role + 値 + 範囲のスクリーンリーダー読み上げは すべてブラウザから無料で得られます。appearance: none とベンダー別 疑似要素で置き換わるのは見た目のクロームだけです。

import { installSlider } from '@hypermedia-components/core';
installSlider();

installSlider() は冪等で、アンインストーラを返します。ゼロ設定の @hypermedia-components/core/behaviors エントリが自動インストールし、 htmx でスワップされた内容も自動で拾います。

Firefox はトラックの 0→値の部分を ::-moz-range-progress でネイティブに 描画します。WebKit と Chromium には同等の疑似要素がないため、同じ効果を --hc-slider-value カスタムプロパティ(0-100 のパーセンテージ)を読む linear-gradient で塗っています。

installSlider()input イベント経由で各スライダーの現在値と --hc-slider-value を同期し続けます — 一度呼んだら忘れて構いません。 サーバレンダリングされるページでは、プロパティを直接書いてください:

<input class="hc-slider" type="range"
min="0" max="100" value="40"
style="--hc-slider-value: 40">

こうすれば、JavaScript の読み込み前でも初回描画から塗りが正しく描画 されます。

data-variant は、デフォルト以外の塗り色として successwarningerror を受け付けます。つまみの枠線もバリアントに追従します。

data-sizesmmd(デフォルト)、lg を受け付けます。 トラックの高さとつまみのサイズは一緒にスケールします。

ネイティブの disabled 属性を使います。トラックとつまみが薄くなり、 コントロールはポインタ / キーボード入力に反応しなくなります。

data-orientation="vertical" を足すとスライダーが立ちます。モダンで ネイティブなやり方 — CSS の writing-mode — を使うため、コントロールは本物の <input type="range"> のままです: OS のつまみ、フルのキーボード( / ステップ、 Home / EndPageUp / PageDown)、フォームへの参加、 スクリーンリーダーの値読み上げがすべて機能し続けます。最大値が上に あるので、 が値を増やします。

高さは --hc-slider-length カスタムプロパティで設定します(デフォルト 12rem):

<input class="hc-slider" type="range" data-orientation="vertical"
style="--hc-slider-length: 16rem">

スライダーは他の入力と同様にフォーム送信へ参加します。即時更新には input を待ち受けます:

<input class="hc-slider"
type="range" min="0" max="100" value="40"
name="volume"
data-hx-post="/preferences/volume"
data-hx-trigger="input changed delay:200ms"
data-hx-include="this">
  • スライダーには常にアクセシブルな名前を与えてください — <label> で包むか aria-label を設定します。
  • ネイティブの input は / (ステップ)、Home / End (最小 / 最大)、PageUp / PageDown(大きなステップ)をカスタム JS なしで処理します。
  • 表示される値が背後の数値と異なるレンジ(例: 最大値が 100 でない パーセント)では、スクリーンリーダーが整形済み文字列を読み上げる よう aria-valuetext="40 %" を設定してください。
  • フォーカスのアウトラインを消さないでください。つまみは --hc-color-focus-ring 経由の box-shadow リングを受け取ります。

ネイティブの <input type="range"> は単一つまみのコントロールです。 min/max のペア(価格帯、明るさの幅など)には レンジを使ってください — hc-range は 2 つのネイティブ range 入力を 1 本のレールに描画し、 installRange() が low ≤ high を保つので、シリアライズはネイティブの ままです。

component トークン(component.tokens.json):

トークンパス用途
slider.track-height / track-bgトラック。
slider.thumb-size / thumb-bg / thumb-borderつまみ。
slider.fillデフォルトの塗り色(action.primary)。
slider.success-fill / warning-fill / error-fillバリアントの塗り。
slider.success-thumb-border / warning-thumb-border / error-thumb-borderバリアントのつまみ枠線。
slider.disabled-fill無効時のつまみ枠線色。
slider.radiusトラック + つまみの角丸。
slider.sm.* / lg.*サイズバリアント。
生成される CSS 変数を表示
--hc-slider-track-height | -track-bg | -radius
--hc-slider-thumb-size | -thumb-bg | -thumb-border
--hc-slider-fill | -success-fill | -warning-fill | -error-fill
--hc-slider-success-thumb-border | -warning-thumb-border | -error-thumb-border
--hc-slider-disabled-fill
--hc-slider-sm-track-height | -sm-thumb-size
--hc-slider-lg-track-height | -lg-thumb-size
--hc-slider-value (0-100, kept in sync by installSlider)
--hc-slider-length (vertical track length; default 12rem)
--hc-color-focus-ring (inherited from data-color)
  • プログレス — 対話しない完了度の表示に。
  • レンジ — 2 つのネイティブ range 入力で作る min/max のデュアルサム版。
  • インプット — テキスト / 数値入力はフォーカスリングの契約を共有します。