前端開發 別再只叫 AI 做漂亮一點:30 天 Vibe Coding UI 元件驗收實驗 · 第 5 / 30 篇

Day 5|輸入文字也有分工:Text Field、Textarea、Password 與 Search

2026 iThome 鐵人賽 Vibe Coding UI Day 5:安安~我是ChiYu~ 昨天才把邀請 Dialog 的操作區分清楚:送出用 Button,權限說明用 Link。按鈕總算不再互相冒充,我把視線往上一移,新的問題已經排好隊等我了。 帳號、密碼、搜尋和備註,一人分到一個長方形輸入框。AI…

快速導覽 查看本文目錄

本文同步自 2026 iThome 鐵人賽原文 。完整系列可見 iThome 系列頁 。

安安~我是ChiYu~

昨天才把邀請 Dialog 的操作區分清楚:送出用 Button,權限說明用 Link。按鈕總算不再互相冒充,我把視線往上一移,新的問題已經排好隊等我了。

帳號、密碼、搜尋和備註,一人分到一個長方形輸入框。AI 的處理方式俐落得很:複製元件、換 Placeholder、收工。

AI 第一版把帳號、密碼、搜尋和備註做成相同的單行輸入框

圖 1:和昨天結尾是同一個 AI 第一版。四個欄位只有 Placeholder 不同,資料規則與輸入後的反應一律欠交。

畫面沒有壞,四份工作卻被壓成同一種。帳號要保存短資料,密碼不能直接露出來,搜尋輸入後得改變清單,備註則要容得下一段完整說明。

它們唯一穩定的共同點,大概只剩「都能打字」。

我先打開 文字輸入元件完整比較頁 ,把圓角、框線和顏色放到一旁,只看文字輸入後發生什麼。

文字輸入元件比較頁:從內容長度、敏感性與搜尋目的定位欄位

圖 2:四個元件外觀都像輸入框,資料用途與輸入後的反應才是真正差別。

先問打完字後要做什麼,四個輸入框自然分家

我先不背元件名稱,只問一題:使用者打完字後,系統接下來要做什麼?

LumenDesk 裡的工作該用的元件打完字後要發生什麼若全用一般 Text Field 會怎樣
填工作區帳號Text Field保存短資料,檢查格式與重複值格式與錯誤訊息沒有清楚落點。
設定初始密碼Password Field預設遮蔽,仍能切換顯示來校對內容直接外露,或根本無法確認是否打錯。
搜尋既有成員Search Field根據關鍵字縮小清單,回報結果數量框裡有文字,底下資料卻完全沒動。
填邀請備註Textarea容納多行內容,保留換行與字數狀態一段話被塞進單行,連回頭閱讀都很痛苦。

這裡沒有哪個元件比較高級。Text Field 不是預設答案,Search Field 也不會因為多一個放大鏡就自動懂得搜尋。

先把資料與操作說清楚,再讓元件各自回座位。

我先在 Password Field 輸入 Aurora2026,再按「顯示密碼」。內容沒有被清空,控制名稱改成「隱藏密碼」,畫面也提醒「密碼目前顯示中,請留意周遭環境」。

接著到 Search Field 輸入「設計」。原本的成員清單縮成一筆「陳怡安|設計組」,結果文字顯示找到 1 位成員,旁邊出現清除控制。

如果只看截圖,這兩個欄位都像右邊多一顆小按鈕的長方形框。真的操作一次,差異就藏不住了。

我做的事Password FieldSearch Field
輸入文字保存一段秘密值,預設遮蔽把文字當成查詢條件
操作右側控制切換顯示/隱藏,原值保留清除條件,清單回到原本範圍
畫面回饋說明內容目前是否顯示回報符合筆數或沒有結果
驗收重點能安全校對,切換時不用重打查詢真的改變資料範圍,不只多一個圖示

Password Field 在保護一個值,Search Field 在控制一批資料。框線長得像,責任完全不同。

四種輸入元件,各自守住一份工作

Text Field 保存短資料,錯誤要留在欄位附近

在 Text Field|文字輸入框 Demo 裡,我用專案名稱示範短文字輸入。這類元件適合姓名、Email、代碼與短名稱。

Vibe UI Atlas 的 Text Field 實際 Demo:專案名稱、必填標記、規則與目前輸入

圖 3:Text Field 收一段短資料。Label、字數規則、目前值與錯誤回饋都留在欄位附近。

能打字只是 Text Field 的入場券。Label 要持續可見,必填與格式規則得說清楚;驗證失敗後,使用者剛才輸入的內容也不能憑空消失。

當內容已經長到需要換行、回頭閱讀,就別把 Text Field 往下拉高假裝沒事。那不是延長版 Text Field,是 Textarea 該接手了。

Password Field 遮住秘密,也要讓使用者安全校對

Password Field|密碼輸入框 用來處理不應直接顯示的秘密值。預設遮蔽很合理,但不能因此要求使用者閉著眼睛相信自己完全沒打錯。

Vibe UI Atlas 的 Password Field 實際 Demo:遮蔽密碼與顯示或隱藏控制

圖 4:Password Field 預設遮蔽內容;顯示或隱藏控制讓使用者校對輸入,切換後原值仍要保留。

顯示/隱藏控制要有清楚名稱,切換時不能清空內容,也不能把鍵盤焦點弄丟。畫面若提示密碼目前正在顯示,使用者才知道旁邊有人經過時該先遮回去。

姓名和 Email 雖然也是個人資料,卻需要直接校對。別看到「私人」兩個字,就順手把所有欄位變成一排圓點,最後連本人都不知道自己填了什麼。

Search Field 要讓清單真的變少,放大鏡不能只當裝飾

Search Field|搜尋欄位 拿輸入文字去查找既有資料,不會把它當成表單值保存。它得交代何時查詢、搜尋中顯示什麼、找到幾筆,以及清除後回到哪裡。

UI 元件百科的 Search Field 實際操作畫面

圖 5:輸入「設計」後,畫面回報找到 1 位成員,只留下符合項目,並提供清除控制。

剛才輸入「設計」後,清單、結果數量與清除控制一起改變,這才叫搜尋。若框裡多了兩個字,底下三筆資料繼續老神在在,那只是 Text Field 戴了一副放大鏡。

Vibe Coding 的需求若只寫「上面放一個搜尋框」,AI 最容易交出外觀。我還會補上觸發時機、搜尋中、無結果、結果數量與清除行為,才算把搜尋流程說完。

Textarea 留給完整段落,送出失敗也不能吃掉內容

Textarea|多行輸入框 適合備註、說明與原因。它需要足夠空間讓使用者回頭閱讀,也要處理換行、字數限制與送出失敗後的內容保留。

Vibe UI Atlas 的 Textarea 實際 Demo:可輸入較長備註的多行欄位

圖 6:Textarea 處理段落內容。可閱讀的輸入空間、字數提示與錯誤後保留內容,都是這個元件的工作。

字數接近上限時可以先提醒,超過後則要明確說出限制。若送出失敗,不能順便把使用者剛打完的兩百字一起消滅,否則下一次填寫大概會比錯誤訊息更有情緒。

反過來,只收一個短名稱或代碼時也不用 Textarea。畫面多出一大片空間,資料不會因此變得比較重要。

Placeholder 會下班,Label 和錯誤線索不能跟著走

輸入框常被做得只剩 Placeholder,畫面看起來很乾淨。代價也很直接:使用者打下第一個字,欄位名稱就消失了。

Placeholder 比較像暫時貼在門上的便利貼,Label 才是門牌。便利貼一被輸入內容蓋掉,使用者回頭只剩一串資料,還得重新猜這是哪個房間。

輸入欄位周邊訊息的角色

圖 7:Label、輔助說明、目前值與錯誤訊息各有責任,不能全部塞進 Placeholder。

欄位周邊資訊負責的工作
Label持續說明這是「工作區帳號」還是「邀請備註」。
Helper Text先交代規則,例如「至少 8 個字元」或「最多 200 字」。
目前值保留使用者輸入,不能因驗證失敗而清空。
Error Message說出哪裡有問題和怎麼修,不能只留一圈紅框。
Clear清除 Search Field 的條件,並讓結果回到可理解的狀態。

這圈文字看起來不像元件主角,卻直接決定欄位出錯後能不能修。只把輸入框畫漂亮,等於替表單準備了一張很好看的沉默臉。

把資料用途與操作反應寫進 Prompt

我不再要求 AI「做四個漂亮輸入框」,而是直接寫清楚每個欄位的資料規則、操作結果和 360px 驗收方式:

為 LumenDesk 的新增成員表單設計四種輸入元件:
1. 工作區帳號使用 Text Field,保留可見 Label,必填與格式錯誤要顯示在欄位附近。
2. 初始密碼使用 Password Field,預設遮蔽,提供有文字說明的顯示/隱藏按鈕;切換時不可清空內容。
3. 成員搜尋使用 Search Field;輸入「設計」後顯示符合人數與清除控制,並提供搜尋中與無結果狀態。
4. 邀請備註使用 Textarea,最多 200 字,顯示目前字數與超過上限的錯誤訊息。
所有欄位在 360px 寬度下都要看得見 Label、訊息與操作控制。

這段規格交出去後,我還會故意做四件不太配合的事:填錯帳號、切換密碼顯示、搜尋不存在的成員,再讓備註超過 200 字。

帳號欄要保留錯誤值並告訴我怎麼修;密碼切換不能清空;搜尋要進入無結果狀態並保留清除入口;Textarea 則要顯示目前字數與上限。

若最後只得到四圈紅色邊框,這份表單仍然在演同一齣戲。

四份工作各自歸位,下一排開關又太整齊了

修改後的 Demo 裡,帳號欄負責保存短資料與格式錯誤;密碼預設遮蔽,切換顯示後原值仍在;搜尋「設計」真的會縮小成員清單;備註則保留多行內容與字數狀態。

四個元件可以共用同一套視覺 Token,這沒有問題。真正被拆開的是資料責任與互動行為。

我繼續往下填邀請表單,AI 又很整齊地替 Email、站內通知、通知頻率和「邀請後立即啟用」放上同一種開關。

AI 第一版把通知管道、通知頻率與立即啟用全部做成 Switch

圖 8:Email、站內通知、三種通知頻率和立即啟用全都能同時打開;畫面還另外放了一顆「儲存設定」。

熟悉的味道回來了。

現在要處理的問題不再是「可以輸入什麼」,而是「可以選幾個」以及「選完何時生效」。明天接著拆 Checkbox、Radio 和 Switch。

參考資料與查閱日期

資料查閱:2026-07-31。

讀完了!你覺得這篇如何?

你的回饋會決定下一篇要寫什麼。

還有疑問

Learning path

別再只叫 AI 做漂亮一點:30 天 Vibe Coding UI 元件驗收實驗

這篇是系列中的第 5 / 30 篇。可以順著列表補完整脈絡,也可以直接跳到需要的段落。

  1. 01 Day 1|AI 不是不會做,是你只說「做得好看一點」
  2. 02 Day 2|這些東西到底叫什麼?Component、Pattern、Layout 與 Template
  3. 03 Day 3|一份 AI 看得懂的 UI Spec,至少要交代這 8 件事
  4. 04 Day 4|按鈕不只是藍色方塊:Button、Link 與操作元件
  5. 05 Day 5|輸入文字也有分工:Text Field、Textarea、Password 與 Search 目前閱讀
  6. 06 Day 6|五種選擇控制怎麼分?Checkbox、Radio、Switch、Toggle Button 與 Segmented Control
  7. 07 Day 7|別再把所有下拉都叫 Dropdown:從 Select 到 Multi-select 的選型指南
  8. 08 Day 8|數值要輸入、拖曳還是評分?六種數值控制的選型
  9. 09 Day 9|輸入日期、選時間還是看整月?五種日期時間元件怎麼選
  10. 10 Day 10|檔案不是選完就好:上傳流程的完整狀態
  11. 11 Day 11|表單錯了,怎麼帶人修回來?從 Label 到 Validation Summary 的修正路徑
  12. 12 Day 12|進階輸入不是越多越完整:OTP、Tag Input、Color Picker 與兩種 Editor
  13. 13 Day 13|手機版不是把 Sidebar 縮小:Header、Navbar、Sidebar 與 Bottom Navigation 怎麼分工
  14. 14 Day 14|使用者走到哪裡了?Breadcrumb、Pagination、Stepper、Progress 與頁內導覽
  15. 15 Day 15|同一區域怎麼切換內容?Tabs、Accordion、Disclosure 與 Segmented Control
  16. 16 Day 16|選一個值,還是執行命令?Select、Menu、Overflow Menu 與 Command Palette
  17. 17 Day 17|資料有層級時,別只用縮排:Tree View、Nested List、Treegrid 與 Expandable Row
  18. 18 Day 18|彈窗要不要鎖住背景?Modal、Non-modal、Alert Dialog 與危險確認
  19. 19 Day 19|點資料表一列後,不一定要跳 Modal:Drawer、Sheet 與 Bottom Sheet
  20. 20 Day 20|滑過去出現的,不一定是 Tooltip:Tooltip、Popover 與 Hover Card
  21. 21 Day 21|重要訊息到底該放在哪裡?Alert、Banner 與 Callout
  22. 22 Day 22|訊息可以自己消失嗎?Toast、Snackbar 與 Notification
  23. 23 Day 23|Loading 不能只放一顆圈圈:五種等待狀態怎麼選
  24. 24 Day 24|畫面空白,不代表沒有資料:Empty、Error、Offline、Permission 與 Success State
  25. 25 Day 25|Card 不是比較漂亮的 List:內容容器怎麼選才讀得懂
  26. 26 Day 26|小型標記怎麼分工?Badge、Tag、Chip、Filter Chip、Status 與 Avatar
  27. 27 Day 27|Table 不是 Data Table:功能越多,不代表資料越好用
  28. 28 Day 28|圖片要展示、選擇、輪播還是放大?七種媒體元件怎麼分工
  29. 29 Day 29|同一句「幫我做後台」,28 天後我不再先看畫面
  30. 30 Day 30|AI 交出畫面不等於完成:30 天後,我改用任務驗收 UI

Further reading

Day 30|AI 交出畫面不等於完成:30 天後,我改用任務驗收 UI 封面圖 2026-09-30 Day 30|AI 交出畫面不等於完成:30 天後,我改用任務驗收 UI Day 29|同一句「幫我做後台」,28 天後我不再先看畫面 封面圖 2026-09-29 Day 29|同一句「幫我做後台」,28 天後我不再先看畫面 Day 28|圖片要展示、選擇、輪播還是放大?七種媒體元件怎麼分工 封面圖 2026-09-28 Day 28|圖片要展示、選擇、輪播還是放大?七種媒體元件怎麼分工

留言討論

用 GitHub 帳號留言,留言會同步到這個 Blog 的 GitHub Discussions。

閱讀導覽

約 7 分鐘

本文目錄

本篇所在系列 · 第 5 / 30 篇

別再只叫 AI 做漂亮一點:30 天 Vibe Coding UI 元件驗收實驗

  1. Day 1|AI 不是不會做,是你只說「做得好看一點」
  2. Day 2|這些東西到底叫什麼?Component、Pattern、Layout 與 Template
  3. Day 3|一份 AI 看得懂的 UI Spec,至少要交代這 8 件事
  4. Day 4|按鈕不只是藍色方塊:Button、Link 與操作元件
  5. Day 5|輸入文字也有分工:Text Field、Textarea、Password 與 Search
  6. Day 6|五種選擇控制怎麼分?Checkbox、Radio、Switch、Toggle Button 與 Segmented Control
  7. Day 7|別再把所有下拉都叫 Dropdown:從 Select 到 Multi-select 的選型指南
  8. Day 8|數值要輸入、拖曳還是評分?六種數值控制的選型
  9. Day 9|輸入日期、選時間還是看整月?五種日期時間元件怎麼選
  10. Day 10|檔案不是選完就好:上傳流程的完整狀態
  11. Day 11|表單錯了,怎麼帶人修回來?從 Label 到 Validation Summary 的修正路徑
  12. Day 12|進階輸入不是越多越完整:OTP、Tag Input、Color Picker 與兩種 Editor
  13. Day 13|手機版不是把 Sidebar 縮小:Header、Navbar、Sidebar 與 Bottom Navigation 怎麼分工
  14. Day 14|使用者走到哪裡了?Breadcrumb、Pagination、Stepper、Progress 與頁內導覽
  15. Day 15|同一區域怎麼切換內容?Tabs、Accordion、Disclosure 與 Segmented Control
  16. Day 16|選一個值,還是執行命令?Select、Menu、Overflow Menu 與 Command Palette
  17. Day 17|資料有層級時,別只用縮排:Tree View、Nested List、Treegrid 與 Expandable Row
  18. Day 18|彈窗要不要鎖住背景?Modal、Non-modal、Alert Dialog 與危險確認
  19. Day 19|點資料表一列後,不一定要跳 Modal:Drawer、Sheet 與 Bottom Sheet
  20. Day 20|滑過去出現的,不一定是 Tooltip:Tooltip、Popover 與 Hover Card
  21. Day 21|重要訊息到底該放在哪裡?Alert、Banner 與 Callout
  22. Day 22|訊息可以自己消失嗎?Toast、Snackbar 與 Notification
  23. Day 23|Loading 不能只放一顆圈圈:五種等待狀態怎麼選
  24. Day 24|畫面空白,不代表沒有資料:Empty、Error、Offline、Permission 與 Success State
  25. Day 25|Card 不是比較漂亮的 List:內容容器怎麼選才讀得懂
  26. Day 26|小型標記怎麼分工?Badge、Tag、Chip、Filter Chip、Status 與 Avatar
  27. Day 27|Table 不是 Data Table:功能越多,不代表資料越好用
  28. Day 28|圖片要展示、選擇、輪播還是放大?七種媒體元件怎麼分工
  29. Day 29|同一句「幫我做後台」,28 天後我不再先看畫面
  30. Day 30|AI 交出畫面不等於完成:30 天後,我改用任務驗收 UI
看完整系列 30 篇