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

Day 3|一份 AI 看得懂的 UI Spec,至少要交代這 8 件事

2026 iThome 鐵人賽 Vibe Coding UI Day 3:安安~我是ChiYu~ 昨天我把成員管理頁拆成 Component、Pattern 和 Layout,總算能指出:「這次只改部門篩選,不動整張頁面。」 修改範圍有了,照理說可以叫 AI 開工了吧? 還不行。因為我手上只剩下這句需求: …

快速導覽 查看本文目錄

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

安安~我是ChiYu~

昨天我把成員管理頁拆成 Component、Pattern 和 Layout,總算能指出:「這次只改部門篩選,不動整張頁面。」

修改範圍有了,照理說可以叫 AI 開工了吧?

還不行。因為我手上只剩下這句需求:

做一個好用、漂亮、可以搜尋的下拉選單。

「好用」沒有說明怎麼操作,「漂亮」每個人的答案都不同,「可以搜尋」也只交代了一小部分。於是我再補上昨天學會的元件名稱:

使用單選 Combobox 選擇既有部門。

這次聽起來專業多了。問題是,聽起來專業和真的能交付,中間還隔著一段不算短的路。

我把兩句需求各做成一個可操作頁面,接著在兩邊都輸入「研究」。

模糊要求與只有元件名稱的瀏覽器操作比較

圖 1:左邊的清單完全沒變;右邊知道要篩選既有部門,但兩邊都還缺少選取後的結果、Reset 與非理想狀態。

同樣輸入「研究」,一邊沒反應,一邊只答對第一題

右邊確實比左邊好。說出 Combobox 之後,至少排除了 Menu、一般 Text Field 等錯誤方向,也限制成只能選擇既有部門。

但 Combobox 沒有附贈讀心術,更沒有兼任產品經理。選完要更新哪裡、載入失敗怎麼辦、手機上要保留什麼,元件名稱一個字都沒有說。

我實際做的事模糊要求只有元件名稱
輸入「研究」三個選項全部保留清單縮小為「研究組」
判斷能否建立新部門無法判斷已限制為既有部門
選取後是否更新成員清單無法判斷仍然無法判斷
檢查 Loading、Empty、Error沒有沒有
清除條件與手機、鍵盤驗收沒有沒有

如果我只看右邊「有成功篩選」,很容易就把它當成改善版收下。等到真的接進成員管理頁,才會發現我們只決定了元件,其他產品規則依然整包交給 AI 猜。

Vibe Coding 最容易出現的誤會就在這裡:Prompt 多了一個英文名詞,畫面可能馬上變得比較像樣;一旦開始操作,沒寫的地方還是會一個個冒出來。

八格 UI Spec,把 AI 還在猜的事情攤開

「Spec」聽起來像是要打開一份四十頁文件。這個系列沒打算把事情搞成那樣,我只需要一張動手前的提醒卡。

一份 UI Spec 的八個欄位

圖 2:八格不是八段漂亮文字。每一格都要能落到畫面、操作或驗收。

要寫的內容用白話問自己LumenDesk 部門篩選
誰要用、要做什麼使用者來這裡要完成哪件事?管理員想找出某個部門的成員。
要用哪個元件這個任務需要哪一種控制?單選、可搜尋的 Combobox。
內容從哪裡來使用者可以選什麼?有沒有不能選的?只能從既有部門選,不能自己新增。
操作後會怎樣輸入、選取、清除後,畫面怎麼變?輸入會篩選;選到部門後更新清單;Reset 清除條件。
不順利時怎麼辦載入中、找不到、失敗或停用時要看見什麼?保留欄位標籤;無結果可清除;失敗時可以重試。
手機能不能用小螢幕上,哪些東西不能被擠掉?Label、目前選擇、錯誤訊息和 Reset 都要看得到。
不用滑鼠能不能用鍵盤按下去會發生什麼?焦點看得見嗎?↓ 開啟、Enter 選取、Escape 關閉。
怎樣算完成你要怎麼知道 AI 這次做對了?不用滑鼠完成搜尋、選取、關閉與重設。

前兩格先決定誰要完成什麼,以及要用哪種元件;中間把資料、互動和不順利的狀況補起來;最後一格則是收件標準。

我不要求八格每次都寫得一樣長,也不會為了排版整齊硬塞內容。它們只負責一件事:AI 交出畫面後,我可以把規格逐格換成操作,不必再靠「感覺好像可以」驗收。

還沒決定就寫「待確認」,別讓 AI 幫忙抽籤

八格列出來後,最容易犯的錯是每一格都想填滿。空白看起來像沒做完,隨手補個答案比較有安全感。

偏偏那個臨時補上的答案,過幾天通常會回來找麻煩。

例如「輸入幾個字後才查詢」,可能跟資料量和 API 成本有關。目前還不知道,就直接寫:

查詢觸發字數:待確認。
請先提供「輸入即篩選」與「輸入 2 個字後查詢」的差異,
不要自行替我選一種。

「待確認」會把尚未完成的決策留在看得到的地方。先讓 AI 提供差異,我再決定;總比它默默選一個數字,最後大家一起假裝那就是需求來得可靠。

把八格放回 Combobox,規格終於長出操作

我把這份規格放進元件百科網站的 Combobox|組合式選擇框 Demo。這次不只看一張完成圖,右側還能切換預設、已選取、載入中、無結果、載入失敗與停用等狀態。

元件百科網站的 Combobox 實際操作畫面

圖 3:輸入「研究」後只剩研究組;右側保留各種狀態入口,Reset 也沒有被藏在 Prompt 裡。

我照著八格規格跑了四項檢查:

  1. 輸入「研究」,候選清單只留下符合的既有部門。
  2. 不用滑鼠,以方向鍵和 Enter 完成選取,再用 Escape 關閉清單。
  3. 切換無結果與載入失敗,畫面仍會說明現況和下一步。
  4. 按 Reset 後清除篩選,360px 寬度下 Label、欄位和狀態訊息仍可閱讀。

前兩個版本只能告訴我「畫面上有一個選單」。補完規格後,我才有辦法指出哪個步驟通過、哪個狀態沒做,以及退回修改時該講哪一句。

Prompt 的字數不是重點。真正有差的是,每句話都有一個對得上的畫面或操作。

從模糊要求到可驗收 UI Spec

圖 4:規格補的是可觀察的操作與狀態,不是更多形容詞。

把八格整理成一份可以直接修改的 UI Prompt

下面這份 Prompt 依照八格規格排列。你不用逐字照抄,把方括號換成自己的情境;還沒決定的地方,就大方留下「待確認」。

我要做 [頁面或功能名稱],給 [使用者角色] 使用。
他來這裡要完成的是:[一個主要任務]。

請使用 [UI 元件名稱],讓他可以 [操作方式]。
資料來自 [資料來源或固定選項];[允許/不允許的事情]。

使用者輸入、選取、清除或送出後,畫面要分別發生:[操作結果]。
載入中、沒有資料、失敗與停用時,請顯示:[狀態與下一步]。

360px 時必須保留:[不能省略的資訊或操作]。
鍵盤要能完成:[按鍵與預期結果]。

完成時,我會驗收:[可以實際操作或觀察的條件]。
還沒決定的地方請標示為「待確認」,不要自行假設。

這不是一段保證 AI 一次做對的咒語。它比較像工作單:哪裡做錯,我能指出欄位;哪裡沒決定,AI 也知道先停下來問。

UI Spec 讓我能指出哪裡沒過,不再只會說「不好用」

昨天我學會替修改範圍畫邊界。今天再往裡面補上資料、行為、狀態和驗收方式,原本那句「做一個好用的下拉選單」才終於變成可以操作的工作。

現在如果結果不對,我不必再說「這個感覺怪怪的」。我可以直接指出:無結果時沒有清除入口、載入失敗後不能重試,或鍵盤焦點跑丟了。

明天開始,我們把這張八格工作單拿去處理 LumenDesk 的第一個完整任務:邀請成員。Dialog 底下有好幾個都能點的東西,但它們點下去的結果完全不同。

先從 Button、Link 與操作元件的分工開始。

參考資料

  • W3C WAI-ARIA APG:Combobox Pattern (查閱:2026-07-23):Combobox 可為可編輯或 select-only,並定義 popup、鍵盤與可存取名稱等行為。
  • W3C WAI:Labeling Controls (查閱:2026-07-23):控制項需要可辨識的標籤,並應與控制項建立關聯。
  • WCAG 2.2 (查閱:2026-07-23):可用於檢查鍵盤操作、標籤、名稱角色值與 Reflow 等可測試條件。

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

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

還有疑問

Learning path

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

這篇是系列中的第 3 / 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。

閱讀導覽

約 6 分鐘

本文目錄

本篇所在系列 · 第 3 / 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 篇