本文へスキップ

価格ヒストグラム・スライダー

在庫の価格分布を棒グラフで見せ、下の二重スライダーで範囲を絞る。範囲内の棒だけ色づき、該当件数が更新される。Airbnb風の定番ECフィルタ。

ENGLISH

Price Histogram Slider

  • JS
約90行領域別 / EC・商品 の一覧 →

プレビュー

ドラッグ

操作ドラッグ/スワイプで操作できます(PC・スマホ対応)。

仕様書

向く場面
  • 価格帯で絞り込む EC・宿泊・中古品の検索
  • 分布を見せてゼロ件の絞り込みを避けたい一覧
  • 下限と上限を同時に指定する範囲フィルタ
避ける場面
  • 件数分布を出せない少数在庫
  • 刻みが細かく正確な金額入力が要る場合
構成要素
  • 範囲ラベル
  • 該当件数
  • 分布バー
  • 選択範囲の帯
  • 下限つまみ
  • 上限つまみ
持っている状態
  • 通常
キーボード

Tab で下限・上限のつまみへ、←→/↑↓ で 1,000 円刻み、Home/End で端へ(ネイティブ range)

支援技術

2 本の range に aria-label(下限価格/上限価格)と aria-valuetext(¥表記)。分布バーは aria-hidden、範囲と件数は aria-live=polite で更新。つまみに focus-visible の輪郭。reduced-motion で着色の遷移停止

動き

範囲に入った棒の着色 150ms。つまみ移動に即応して件数を更新

デザインの要点

  • 分布バーを先に見せてから絞らせる。件数 0 の範囲に山が無いのが見えれば、ゼロ件の絞り込みを避けられる
  • 2 本の range を重ね、トラックは pointer-events:none・つまみだけ auto にする。両つまみを 1 つのレイヤーで扱う定石
  • つまみが追い越したら操作中の側に揃える。下限>上限を許すと件数が突然 0 になる
  • 件数はつまみを動かすたびに即時更新する。離してから更新すると試行錯誤ができない
実装メモ

重ねた2本の <input type=range>(下限・上限)でレンジを作り、トラック側は pointer-events:none、つまみだけ pointer-events:auto にして両つまみを操作可能にする定石です。上のヒストグラムは固定のダミー分布で、選択範囲に入る棒だけ着色し件数を合算します。Airbnbなどが採用する「ゼロ件を避ける」ECフィルタUX。実運用では在庫データから分布と件数を算出してください。

コード(コピーして使えます)

<div class="ph-wrap">
  <div class="ph-head" aria-live="polite">
    <span class="ph-range" id="ph-range">¥4,000 〜 ¥16,000</span>
    <span class="ph-count" id="ph-count">該当 214件</span>
  </div>
  <div class="ph-bars" id="ph-bars" aria-hidden="true"></div>
  <div class="ph-slider">
    <div class="ph-track"></div>
    <div class="ph-fill" id="ph-fill"></div>
    <input type="range" id="ph-min" min="0" max="20000" step="1000" value="4000" aria-label="下限価格">
    <input type="range" id="ph-max" min="0" max="20000" step="1000" value="16000" aria-label="上限価格">
  </div>
</div>

タグ

同じカテゴリ「EC・商品」のほかのパーツ

関連パーツ