一個表單只要多問使用者一個不必要的欄位,就可能少掉一批願意填完的人。Baymard Institute 長年追蹤電商結帳流程發現,平均結帳頁面預設塞了 11.3 個欄位,但真正必要的其實只要 6 到 8 個,光是把欄位砍到位就能讓轉換率提升超過三成。表單設計看似是最基礎的 UI 工作,實際上牽涉認知負荷、輸入效率、錯誤復原與無障礙等多重問題,每個小決定都直接影響使用者要不要按下送出鍵。
今天要拆解表單設計裡最常被忽略、卻最影響完成率的七個面向:單欄佈局、標籤與 placeholder 的差別、即時驗證的時機、必填標示的寫法、輸入類型與鍵盤的搭配、用漸進揭露減少欄位,以及行動裝置與無障礙的具體做法。這些不是美感偏好,而是有研究數據支撐的設計決策。
📖 學(核心)
單欄佈局:眼球不用來回跳
多欄位並排的表單看起來緊湊、資訊密度高,但眼動追蹤研究一致顯示單欄表單的完成速度與正確率都比多欄位好。原因在於視覺動線:單欄由上往下移動時,使用者的目光只需要沿著一條垂直軸前進;一旦出現左右並排的欄位,眼球必須做額外的水平掃視去判斷「下一格是新欄位還是同一列的延伸」,這個判斷本身就是額外的認知負擔。Smashing Magazine 在〈Designing Efficient Web Forms〉裡明確指出,把欄位一個接一個垂直排列能維持使用者的填寫流暢度,避免打斷原本的閱讀節奏。
例外狀況只有邏輯上本來就該並排的欄位群,例如「城市/郵遞區號」或「有效期限/安全碼」這種天生成對、使用者已經習慣同時處理的資料。就算如此,這些並排欄位仍然應該被視覺上分成同一個群組,而不是把整個表單切成兩欄來塞更多不相干的欄位。表單設計的黃金原則是:一次只讓使用者處理一件事,欄位的排列方式要服務這個原則,而不是服務頁面看起來多滿。
實務上很多設計師想用多欄位「省空間」,尤其是在桌機寬螢幕上,留白看起來浪費。但留白本身就是降低認知負荷的工具,NN/g 在探討如何用留白分組表單元素時強調,適當的間距能幫助使用者判斷哪些欄位屬於同一個邏輯區塊。與其用多欄位塞滿橫向空間,不如用留白和分節標題把長表單拆成幾個有意義的段落,讓使用者感覺自己是一段一段完成,而不是面對一整片欄位海。
標籤與 placeholder:兩者不能互相取代
標籤(label)和 placeholder 是完全不同的元件,功能上不可互換,這是這幾年 UX 圈被反覆強調卻仍常被誤用的一點。標籤的功能是「這個欄位要填什麼」,它必須永久顯示在欄位旁邊或上方;placeholder 的功能頂多是「範例格式長什麼樣子」,它會在使用者一開始打字就消失。NN/g 的研究直接把「用 placeholder 取代標籤」列為有害的做法,因為使用者一旦開始輸入,唯一提示欄位用途的文字就不見了,如果中途被打斷、忘記自己在填什麼,或是想回頭檢查表單有沒有填錯地方,畫面上完全沒有任何線索可以幫他確認。
這個問題在長表單或需要花時間思考的欄位上特別致命。想像使用者填到「身分證字號」欄位時被電話打斷,三分鐘後回來,如果欄位只剩游標閃爍、沒有標籤,他得靠記憶或重新往上捲動確認自己填到哪。對於有認知或記憶負擔的使用者(年長者、匆忙的行動裝置使用者),這種設計等於是在製造流失點。此外,placeholder 的預設淺灰色通常對比度不足,本身就有無障礙上的問題,視覺低對比又加上內容會消失,等於雙重扣分。
正確的做法是標籤永遠可見,放在欄位正上方(NN/g 與 Google 的行動裝置研究都驗證這種佈局在各種螢幕尺寸下適配最好),需要格式範例時,把範例文字放在標籤下方的輔助說明(helper text)裡,而不是塞進 placeholder。例如「手機號碼」標籤下方用較小字級寫「例:0912-345-678」,這樣範例文字在使用者輸入後依然留在畫面上,不會因為開始打字就消失。placeholder 真正適合的場合非常少,頂多用在搜尋框這種單一、無需驗證、內容一目了然的輸入框。
即時驗證與錯誤訊息:時機比技術更重要
即時驗證(inline validation)的核心爭議不是要不要做,而是什麼時候做。太早驗證會製造挫折感:使用者才打了兩個字元,系統就跳出「電子郵件格式錯誤」,這種過度敏感的驗證反而讓人覺得表單在找碴。正確的時機是「使用者離開欄位之後」(on blur)才驗證,而不是每敲一個鍵就檢查一次;等到整個欄位的內容確定下來,再判斷格式對不對,這樣才符合使用者實際的輸入節奏。
已經驗證通過的欄位可以給予正向回饋,例如一個小勾勾或欄位邊框變綠,這種正向強化能降低使用者對後續欄位的焦慮,讓他們有「這樣做是對的」的即時確認感。但正向回饋不是必要條件,錯誤提示才是關鍵:當欄位驗證失敗時,錯誤訊息必須具體說明「哪裡錯、為什麼錯、怎麼改」,而不是籠統地寫「輸入錯誤」。例如密碼欄位驗證失敗,訊息應該寫「密碼需包含至少一個數字」,而不是單純標紅了事。
錯誤訊息的呈現位置也有講究,訊息要緊貼在對應欄位旁邊,而不是把所有錯誤集中列在表單最上方,讓使用者送出後還要自己對照是哪個欄位出錯。同時要遵守不能只靠顏色傳遞資訊的原則,色盲或色弱使用者無法單靠「欄位變紅」辨識問題,因此除了顏色之外,還必須搭配圖示(例如驚嘆號)與文字說明,讓所有使用者都能靠非顏色的線索定位問題所在。送出後的整體錯誤摘要也有價值,但它應該是補充,不能取代逐欄位的即時提示。
必填標示:說清楚少填的比多填的更省力
必填欄位的標示方式看似枝微末節,卻直接影響使用者掃視表單時的判斷速度。多數表單的慣例是用星號(*)標記必填欄位,但如果一個表單裡選填欄位比必填欄位少,更有效率的做法反而是只標示選填欄位,並在旁邊寫「(選填)」,這樣使用者不需要逐一辨認星號,可以預設「沒特別標記就是要填」。這個技巧特別適合欄位大多必填、只有一兩個選填欄位的常見情境,例如註冊表單裡「電話」是必填、「暱稱」是選填。
如果一定要用星號標示必填,切記要在表單最上方或欄位群開頭加上一行文字說明「標示 * 的欄位為必填」,因為星號本身不具備語意,對螢幕報讀軟體或初次接觸這個表單的使用者來說,看到孤立的符號並不會直覺理解它的意思。同時避免用純顏色(例如紅色星號)作為唯一線索,理由與錯誤訊息一樣:色盲使用者看不出差異。
另外要提醒一個常被忽略的細節:必填標示要用文字明確傳達給輔助技術,而不是只靠視覺樣式。在程式碼層面,必填欄位應該搭配 aria-required="true" 或原生的 required 屬性,讓螢幕報讀軟體在使用者聚焦到欄位時就唸出「必填」,而不是只讓視力使用者看到星號。這一點在無障礙審查裡是很基本、卻也是最常被漏掉的項目。
輸入類型與鍵盤:讓裝置幫使用者做對的事
行動裝置上,正確設定 input type 是成本最低、效益最高的優化之一。email 欄位用 type="email" 會自動叫出帶有 @ 符號的鍵盤,電話欄位用 type="tel" 會叫出數字鍵盤,網址欄位用 type="url" 會把常用符號放到鍵盤前排,這些調整不需要任何額外的驗證邏輯,純粹靠瀏覽器原生行為就能減少使用者切換鍵盤模式的次數。很多表單至今仍然全部用預設的 text 型別,等於強迫手機使用者自己手動切換到數字或符號鍵盤,多按好幾次才能完成一件事。
輸入類型的選擇也要考慮自動完成(autocomplete)屬性,正確標註 autocomplete="email"、autocomplete="tel"、autocomplete="street-address" 等標準值,可以讓瀏覽器或系統自動帶出使用者過去儲存過的資料,姓名、地址、信用卡卡號都能一鍵帶入,大幅縮短填寫時間。這對行動裝置的效益又更明顯,因為觸控鍵盤輸入速度天生比實體鍵盤慢,能少打一個字都是賺到。
除了鍵盤類型,欄位本身的格式限制也該對應真實情境。日期欄位盡量用原生的 date picker 或分開的下拉選單,避免要求使用者自己手動輸入日期格式(到底是年/月/日還是月/日/年常常搞混);信用卡卡號欄位可以在輸入過程自動加上空格分隔,方便使用者核對自己有沒有打錯;密碼欄位提供「顯示密碼」的切換眼睛圖示,讓使用者能核對自己打的內容,減少因為看不到內容而重複輸入錯誤密碼的挫折感。
🧠 記
- 單欄佈局勝過多欄位並排,眼動追蹤證實垂直單一動線完成率更高,例外只留給邏輯上天生成對的欄位(如城市/郵遞區號)。
- 標籤要永久可見放在欄位上方,placeholder 會在打字後消失、不能取代標籤,格式範例請寫進標籤下方的輔助說明文字。
- 即時驗證要等使用者離開欄位(on blur)才觸發,太早驗證只會製造挫折感;錯誤訊息要具體、緊貼欄位、不能只靠顏色傳達。
- 必填標示若選填欄位較少,改標示「(選填)」更省力;用星號則務必在表單開頭說明星號代表必填,並加上 aria-required 給螢幕報讀軟體。
- email、電話、網址欄位務必設定對應的 input type,讓行動裝置自動叫出正確鍵盤,並搭配 autocomplete 屬性加速填寫。
- 用漸進揭露(progressive disclosure)先問核心欄位,次要或條件式欄位等使用者觸發相關選項才顯示,避免一開始就攤開所有欄位嚇跑使用者。
- Baymard 的研究顯示結帳表單欄位數從 16 個砍到 8 個能顯著提升轉換率,砍欄位前先問「這個欄位現在真的需要嗎,還是可以事後再問」。
✍️ 實踐
- 打開手邊正在維護或即將設計的一個表單,先數一數目前的欄位總數,標出哪些是business真正需要、哪些只是「順手加的」。
- 檢查每個欄位的標籤是不是永久顯示,把任何目前只靠 placeholder 傳達欄位用途的地方,改成標籤 + 上方輔助說明的組合。
- 幫每個欄位設定正確的 input type 與 autocomplete 屬性,尤其是 email、電話、地址、信用卡卡號這幾類高頻欄位。
- 把即時驗證的觸發時機改成 on blur,並重寫至少三則錯誤訊息,確保每則都講清楚「哪裡錯、怎麼改」而不是只寫「格式錯誤」。
- 針對非必填欄位少的表單,把星號必填標示改成「(選填)」標記法,並用漸進揭露把條件式欄位(例如「其他,請說明」)預設隱藏,觸發才顯示。
🔗 延伸學習
- Website Forms Usability: Top 10 Recommendations
- Placeholders in Form Fields Are Harmful
- Designing Efficient Web Forms: On Structure, Inputs, Labels And Actions
- E-Commerce Cart & Checkout Usability Research
💬 問 AI
我正在設計一個包含姓名、電話、電子郵件、地址、生日、備註的註冊表單,請幫我:
1. 判斷哪些欄位可以用漸進揭露延後詢問,哪些是核心必填欄位
2. 幫每個欄位建議適合的 input type 與 autocomplete 屬性
3. 幫我寫三則具體的錯誤驗證訊息範例(避免用「格式錯誤」這種籠統說法)
4. 檢查我的必填標示方式是否符合無障礙原則(aria-required、非純顏色標示)
請針對行動裝置與桌機分別給出佈局建議。