步驟指示器 (Progress Stepper)

  • 新提案
  • 封閉測試
  • 公開測試
  • 已穩定
成熟度說明
  • 新提案:未完成開發、請勿使用。
  • 封閉測試:開發暫時性完成,可使用。可能仍有親和力或其他使用上問題待透過實測發現。
  • 公開測試:開發暫時性完成,歡迎使用。具有完整親和力報告。
  • 已穩定:開發完成、歡迎使用。應無任何親和力或使用上問題。

說明

  • 步驟指示器(Progress Stepper)用於向使用者呈現其在多步驟流程中的進度,例如線上申辦、多頁表單、結帳等情境。
  • 適合用於有明確線性順序、且可拆分為 3 個以上階段的流程。

預設(含標籤)

  1. 個人資料 已完成
  2. 家戶狀態 已完成
  3. 檢附文件
  4. 簽章 未完成
  5. 檢閱與送出 未完成
3 步,共 5

檢附文件

HTML
<div class="progress-stepper">
  <ol class="progress-stepper__segments">
    <li class="progress-stepper__segment progress-stepper__segment--complete">
      <span class="progress-stepper__label">個人資料</span>
      <span class="progress-stepper__status-text">已完成</span>
    </li>
    <li class="progress-stepper__segment progress-stepper__segment--complete">
      <span class="progress-stepper__label">家戶狀態</span>
      <span class="progress-stepper__status-text">已完成</span>
    </li>
    <li class="progress-stepper__segment progress-stepper__segment--current" aria-current="step">
      <span class="progress-stepper__label">檢附文件</span>
    </li>
    <li class="progress-stepper__segment">
      <span class="progress-stepper__label">簽章</span>
      <span class="progress-stepper__status-text">未完成</span>
    </li>
    <li class="progress-stepper__segment">
      <span class="progress-stepper__label">檢閱與送出</span>
      <span class="progress-stepper__status-text">未完成</span>
    </li>
  </ol>
  <div class="progress-stepper__heading">
    <span class="progress-stepper__heading-counter">
      <span class="progress-stepper__heading-text">第</span>
      <span class="progress-stepper__current-step">3</span>
      <span class="progress-stepper__heading-text">步,共</span>
      <span class="progress-stepper__total-steps">5</span>
      <span class="progress-stepper__heading-text">步</span>
    </span>
    <h4 class="progress-stepper__heading-text">檢附文件</h4>
  </div>
</div>

含編號

以數字圓圈強化「第幾步」的視覺暗示,適合需要強調步驟順序的流程。

  1. 個人資料 已完成
  2. 家戶狀態 已完成
  3. 檢附文件
  4. 簽章 未完成
  5. 檢閱與送出 未完成
3 步,共 5

檢附文件

HTML
<div class="progress-stepper progress-stepper--counters">
  <ol class="progress-stepper__segments">
    <li class="progress-stepper__segment progress-stepper__segment--complete">
      <span class="progress-stepper__counter" aria-hidden="true">1</span>
      <span class="progress-stepper__label">個人資料</span>
      <span class="progress-stepper__status-text">已完成</span>
    </li>
    <li class="progress-stepper__segment progress-stepper__segment--complete">
      <span class="progress-stepper__counter" aria-hidden="true">2</span>
      <span class="progress-stepper__label">家戶狀態</span>
      <span class="progress-stepper__status-text">已完成</span>
    </li>
    <li class="progress-stepper__segment progress-stepper__segment--current" aria-current="step">
      <span class="progress-stepper__counter" aria-hidden="true">3</span>
      <span class="progress-stepper__label">檢附文件</span>
    </li>
    <li class="progress-stepper__segment">
      <span class="progress-stepper__counter" aria-hidden="true">4</span>
      <span class="progress-stepper__label">簽章</span>
      <span class="progress-stepper__status-text">未完成</span>
    </li>
    <li class="progress-stepper__segment">
      <span class="progress-stepper__counter" aria-hidden="true">5</span>
      <span class="progress-stepper__label">檢閱與送出</span>
      <span class="progress-stepper__status-text">未完成</span>
    </li>
  </ol>
  <div class="progress-stepper__heading">
    <span class="progress-stepper__heading-counter">
      <span class="progress-stepper__heading-text">第</span>
      <span class="progress-stepper__current-step">3</span>
      <span class="progress-stepper__heading-text">步,共</span>
      <span class="progress-stepper__total-steps">5</span>
      <span class="progress-stepper__heading-text">步</span>
    </span>
    <h4 class="progress-stepper__heading-text">檢附文件</h4>
  </div>
</div>

無標籤

當步驟名稱過長或空間有限時使用。標籤列以 aria-hidden="true" 隱藏避免螢幕報讀軟體朗讀無意義資訊,進度資訊仍由下方標題傳達。

3 步,共 5

檢附文件

HTML
<div class="progress-stepper progress-stepper--no-labels">
  <ol class="progress-stepper__segments" aria-hidden="true">
    <li class="progress-stepper__segment progress-stepper__segment--complete"></li>
    <li class="progress-stepper__segment progress-stepper__segment--complete"></li>
    <li class="progress-stepper__segment progress-stepper__segment--current"></li>
    <li class="progress-stepper__segment"></li>
    <li class="progress-stepper__segment"></li>
  </ol>
  <div class="progress-stepper__heading">
    <span class="progress-stepper__heading-counter">
      <span class="progress-stepper__heading-text">第</span>
      <span class="progress-stepper__current-step">3</span>
      <span class="progress-stepper__heading-text">步,共</span>
      <span class="progress-stepper__total-steps">5</span>
      <span class="progress-stepper__heading-text">步</span>
    </span>
    <h4 class="progress-stepper__heading-text">檢附文件</h4>
  </div>
</div>

CSS

  • .progress-stepper:最外層容器。
  • .progress-stepper--counters:數字編號變體。
  • .progress-stepper--no-labels:無標籤變體。
  • .progress-stepper__segments:步驟清單(ol)。
  • .progress-stepper__segment:單一步驟項目(li)。
  • .progress-stepper__segment--complete:已完成步驟。
  • .progress-stepper__segment--current:目前步驟。
  • .progress-stepper__label:步驟文字標籤。
  • .progress-stepper__counter:數字編號圓圈(僅 counter 變體)。
  • .progress-stepper__status-text:視覺隱藏的完成狀態文字(供螢幕報讀軟體朗讀)。
  • .progress-stepper__heading:步驟指示器下方的標題區。
  • .progress-stepper__heading-counter:「第 N 步,共 M 步」文字。

使用規範

  • 明顯區別目前步驟:目前步驟應是視覺上最為突出的,其次是已完成步驟,未完成步驟最弱;但未完成步驟仍需符合色彩對比規範,不應看起來像「停用」狀態。
  • 使用簡短標籤:標籤請用短詞或單一詞彙;若標籤過長,改採用無標籤版本。
  • 導覽另外提供:步驟指示器不負責頁面切換;請以「上一步/下一步」按鈕提供導覽。
  • 標題放在指示器下方:每個步驟頁面都應有明確的頁面標題;步驟指示器的標籤不足以作為頁面標題。
  • 顯示「第 N 步,共 M 步」:在標題旁顯示目前進度數字,強化使用者對流程的掌握。
  • 避免過多步驟:若步驟超過 6 個,應考慮拆分為多個子流程或改用其他呈現方式。

親和力

  • 使用 <ol> 原生有序清單語意呈現步驟。
  • aria-current="step" 標示目前所在的步驟項目,讓輔助科技使用者得知自己位於整個流程的何處。
  • 每個步驟內以視覺隱藏的文字補上「已完成」「未完成」等完成狀態,避免僅以顏色傳達資訊。
  • 目前步驟不加「已完成/未完成」狀態文字,避免重複朗讀。
  • 無標籤變體將整個 <ol>aria-hidden="true" 隱藏,因為其中無實質內容;進度資訊由下方的「第 N 步,共 M 步 — 步驟名稱」標題傳達,確保輔助科技使用者仍能獲得完整資訊。
  • counter 變體中的數字圓圈僅為視覺裝飾,以 aria-hidden="true" 隱藏,避免螢幕報讀軟體朗讀出與順序重複的數字。
  • 步驟指示器本身不具互動功能,因此不需處理鍵盤焦點;若未來要將各步驟設計為可點擊回溯,應改為 <a><button>,並處理 :focus-visible 樣式。

參考資料