Select 選擇清單
概述
選擇清單讓使用者從預先定義的選項中擇一,使用瀏覽器原生的下拉 UI。
多數情況請優先考慮其他元件
- 選項在 6 個以下:用 Radio 一次顯示所有選項,更直觀
- 使用者可能用打字找選項(如國家、地址):用 autocomplete
- 選項超過 20 個且使用者已知道想選什麼:才用 select
GOV.UK 的研究顯示 select 對行動裝置使用者、不熟悉電腦的使用者、輔助科技使用者都是相對困難的元件。
互動範例
基本用法
選項以 <option> 子元素傳入,與原生 HTML 用法一致。
含提示文字
分組(optgroup)
選項可用 <optgroup> 分組,幫助使用者快速辨識類別。
預設選取
使用 selected 屬性設定預設選項。
錯誤狀態
停用狀態
使用方式
bash
pnpm add @gov-tw/web-componentsts
import '@gov-tw/web-components/govtw-select';html
<!-- 基本 -->
<govtw-select label="居住縣市" name="city">
<option value="">請選擇</option>
<option value="taipei">臺北市</option>
<option value="kaohsiung">高雄市</option>
</govtw-select>
<!-- 含提示 -->
<govtw-select label="申辦類別" hint="說明文字" name="category">
<option value="a">A</option>
<option value="b">B</option>
</govtw-select>
<!-- 錯誤 -->
<govtw-select label="必選項目" error="請選擇" name="required-field">
<option value="">請選擇</option>
<option value="a">A</option>
</govtw-select>屬性
| 屬性 | 型別 | 預設值 | 說明 |
|---|---|---|---|
label | string | '' | 標籤文字 |
hint | string | '' | 提示文字,顯示在標籤下方 |
error | string | '' | 錯誤訊息,觸發紅色邊框與左側邊線 |
name | string | '' | 表單欄位名稱 |
value | string | '' | 目前選取的值 |
autocomplete | string | '' | 瀏覽器自動填入提示 |
disabled | boolean | false | 是否停用 |
選項以 <option> / <optgroup> 子元素傳入(不是屬性)。
事件
| 事件 | 說明 |
|---|---|
change | 使用者改變選項時觸發;可從 event.target.value 讀值 |
無障礙
- 每個 select 都有對應的
<label>元素,透過for/id關聯 - 提示文字和錯誤訊息透過
aria-describedby關聯到 select - Focus 狀態以黃色
#fd0outline + 黑色加粗邊框清晰標示 - 錯誤狀態同時設定
aria-invalid="true" - 使用原生
<select>元素,鍵盤操作行為(上下鍵切換、空白鍵開啟、Esc 關閉)由瀏覽器/作業系統提供,與使用者習慣一致 - 支援
ElementInternals參與原生表單提交
設計指引
何時使用
- 選項超過 20 個,且 radio 會顯得過於擁擠
- 使用者已經知道自己想選什麼,不需要瀏覽選項
- 內容偏靜態(如國家、年份、單位代碼)
何時不使用
撰寫指引
- 標籤文字應簡短明確,不加冒號
- 第一個選項用
<option value="">請選擇</option>作為預設提示,避免使用者誤以為已選好 - 選項文字用使用者熟悉的措辭,避免內部代碼或縮寫
- 選項排序:有自然順序用該順序(如年份、月份);無自然順序用使用頻率或字母順序
相關元件
- Radio — 單選且選項不多時的首選
- Checkbox — 可複選
- Text Input — 自由輸入