コンテンツにスキップ

プログレス

hc-progress は標準の <progress> 要素に適用します。ネイティブの 要素は ARIA の role="progressbar" セマンティクスと value / max の属性ペアを保ちます。appearance: none とベンダー別 疑似要素で置き換わるのは見た目のクロームだけです。

別名: プログレスバー、進捗バー。

value と(任意で)max を設定します。パーセンテージはブラウザが 自動計算します。

value が変わると塗りは滑らかにトランジションします — htmx の スワップでも JS の更新でも。

「所要時間が不明」の状態には value を省きます。ミュートの グラデーションが一定のリズムでトラックを横切ります。

スライドアニメーションは prefers-reduced-motion: reduce を尊重 します — ユーザーが動きをオプトアウトしていれば、トラックは代わりに 静的な中央寄せのグラデーションを表示します。

data-variant は、デフォルト以外の塗り色として successwarningerror を受け付けます。

data-sizesmmd(デフォルト)、lg を受け付けます。

<progress> は普通の DOM ノードです — htmx は他の要素と同様に スワップできます。ポーリングや SSE のパターンと組み合わせて、サーバ側 の進捗を表示します:

<progress
class="hc-progress"
value="0" max="100"
aria-label="Importing"
data-hx-get="/imports/42/progress"
data-hx-trigger="every 500ms"
data-hx-swap="outerHTML">
</progress>

サーバは更新済みの <progress class="hc-progress" value="N" max="100"> を返し、塗りが 前の値から新しい値へアニメーションします。

  • 要素には常にアクセシブルな名前を与えてください — aria-label か、 包んでいる <label for> 要素で。なければスクリーンリーダーは文脈 なしに「プログレスバー」と読み上げます。
  • パーセンテージは valuemax が運びます。 aria-valuenow / aria-valuemax を別途設定する必要はありません。 ブラウザが属性をアクセシビリティツリーへ自動マップします。
  • 長時間(数秒以上)のタスクでは、定期的に更新されるステータス テキストとプログレスバーを組み合わせてください。素のバー単体は 解釈しづらいものです。
  • 不確定のアニメーションは prefers-reduced-motion: reduce の ユーザーに対して自己抑制します。

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

トークンパス用途
progress.heightトラックの高さ。
progress.radiusトラックの角丸。
progress.bgトラックの背景。
progress.fillデフォルトの塗り色(action.primary)。
progress.success-fill / warning-fill / error-fillバリアントの塗り。
progress.transition-durationvalue 変更時の塗りアニメーション。
progress.indeterminate-durationvalue なしのときのスライド周期。
progress.sm.height / lg.heightサイズバリアント。
生成される CSS 変数を表示
--hc-progress-height | -radius | -bg | -fill
--hc-progress-success-fill | -warning-fill | -error-fill
--hc-progress-transition-duration | -indeterminate-duration
--hc-progress-sm-height | -lg-height
  • スピナー — 所要時間が 短すぎるか不明すぎてバーに値しないとき。
  • file-upload レシピ — 実際のアップロード進捗でこのバーを駆動します(installUploadProgress())。
  • アラート — 「インポート中… 60%」のステータス行でプログレスバーとよく組み合い ます。

レシピでの利用: ファイルアップロード