DESIGN.md 都寫了,AI 頁面為什麼還是一接數據就崩?
整理版優先睇
DESIGN.md只治標,UI Spec先係令AI頁面接得住數據嘅關鍵
呢篇文章係全棧開發者Max King嘅實戰覆盤。佢發現用AI生成頁面嗰陣,就算寫好DESIGN.md嚟統一風格,頁面一到真實數據就會崩——字段太長撐爆佈局、冇數據留白、接口壞咗冇提示、手機一睇就塌。佢指出問題在於:DESIGN.md管唔到頁面嘅數據狀態、交互邏輯同響應式規則,AI只係按「演示態」去估,梗係出事。
作者提出解決方法係寫UI Spec——喺寫Code之前先定義頁面目標、模塊、字段、loading/empty/error/disabled狀態、響應式規則同驗收標準。佢仲附咗一份「UI Spec生成提示詞」同一個SaaS Dashboard示例,話呢步唔單止約束AI,仲逼自己諗清楚頁面所有邊界。
總括嚟講,DESIGN.md + UI Spec + Handoff.md先係完整流程:風格統一靠DESIGN.md,頁面拆解靠UI Spec,執行落地靠Handoff.md。作者最後呼籲讀者留言分享自己卡喺邊步,佢會繼續覆盤。
- DESIGN.md只能話畀AI個項目「應該長咩樣」,但唔知頁面「實際上要點樣跑」;真實業務需要定義字段長度、空數據、錯誤狀態、權限限制同移動端變形。
- AI好容易只做出「演示態頁面」——默認有數據、字段短、桌面端、冇意外,一接真實數據就崩。作者會特登將mockData改壞嚟測試:加長字段、塞多幾行、改成0條、模擬接口報錯。
- UI Spec係頁面說明書,唔係代碼亦唔係設計圖。佢要定義:頁面目標、用戶動作、每個模塊嘅數據字段、組件結構、loading/empty/error/disabled/normal五種狀態、desktop/tablet/mobile響應式規則、驗收標準、禁止AI自由發揮嘅位置。
- 作者分享咗一份「UI Spec生成提示詞」,叫AI按結構化格式輸出,然後自己檢查漏咗咩狀態同字段。呢步逼人諗清楚成個頁面,唔係等AI亂估。
- 實際案例:SaaS Dashboard UI Spec示例,包括核心指標卡片嘅字段(今日收入、新增用戶、轉化率、待處理訂單)、表格字段、響應式規則(desktop 4列、tablet 2列、mobile單列堆疊)同驗收標準(長字段唔撐爆、空數據有提示、接口錯誤可重試)。
UI Spec 生成提示詞
請先唔好寫代碼。請根據下面嘅頁面需求,幫我拆一份 UI Spec,用於後續交畀 Codex / Cursor / Claude Code 實現頁面。重點寫清楚:1. 頁面目標 2. 用戶主動作 3. 頁面模塊 4. 每個模塊嘅數據字段 5. 組件結構 6. loading / empty / error / disabled / normal 狀態 7. desktop / tablet / mobile 響應式規則 8. 驗收標準 9. 邊啲地方唔好畀 AI 自己發揮。頁面需求:[呢度貼你嘅頁面需求]。技術背景:[呢度寫你嘅技術棧,例如 React + TypeScript + Tailwind + shadcn/ui]。請輸出結構化 UI Spec,唔好直接輸出代碼。
SaaS Dashboard UI Spec 示例
頁面名稱:SaaS Dashboard。頁面目標:畀用戶快速見到業務概覽、待處理任務同關鍵風險。用戶主動作:查看關鍵指標,並進入待處理事項。頁面模塊:1. 頂部導航 2. 核心指標卡片 3. 趨勢圖 4. 最近訂單表格 5. 待辦事項/風險提醒。核心指標卡片字段:今日收入、新增用戶、轉化率、待處理訂單。最近訂單表格字段:訂單編號、客戶名稱、金額、狀態、創建時間、操作。頁面狀態:loading(骨架屏,唔白屏)、empty(提示暫無數據+下一步動作)、error(錯誤提示+重試按鈕)、normal(真實數據)、disabled(提交中或權限不足時按鈕不可點)。響應式規則:desktop指標卡片4列,tablet 2列,mobile單列堆疊,表格轉卡片列表,唔準橫向溢出。驗收標準:主指標第一屏可見、長字段唔撐爆佈局、空數據唔留白、接口錯誤必須可重試、移動端唔橫向滾動、按鈕狀態同數據狀態一致。
DESIGN.md 管到風格,管唔到頁面狀態
作者 Max King 之前寫咗 DESIGN.md 想解決 AI 寫 UI 時風格亂飄嘅問題,顏色、按鈕、卡片、表格密度全部寫曬,開頭覺得效果唔錯。但繼續做落去就發現:風格係統一咗,但頁面一接近真實數據,新問題馬上浮出嚟。
- 1 客戶名一長,卡片就會被撐開
- 2 表格多兩列,頁面就開始橫向滾動
- 3 冇數據嗰陣,中間就空喺度
- 4 接口報錯時,頁面唔知畀用戶睇咩
- 5 桌面仲勉強睇得,換到手機尺寸就塌咗
AI 好容易只做出「演示態頁面」
作者定義咗一個概念叫「演示態頁面」——默認展示最順眼嘅一種狀態:有數據、字段唔長、表格啱啱幾行、按鈕點得、圖表有內容、屏幕寬度係桌面端。呢個狀態好容易靚,但真實業務麻煩嘅地方偏偏唔喺呢個狀態。
真實業務頁面要處理空數據、慢接口、錯誤狀態、字段溢出、權限限制同移動端變形
作者話:唔係 AI 唔識寫 CSS,而係佢一開始攞到嘅任務入面就冇定義呢啲邊界。好多頁面截圖睇落 ok,但真正接接口、接權限、接移動端就開始出事。
我而家點樣測試 AI 頁面:特登整壞啲數據
作者話佢而家會故意將 mockData 改壞:將 customerName 換成 30 個字以上、表格狀態加多幾個更長嘅枚舉、金額字段改成空值、列表數據改成 0 條、接口狀態改成 loading 同 error。呢啲測試唔複雜,但好快就睇到頁面係咪得一個靚靚嘅靜態殼。
字段長度係最容易暴露問題嘅位
真實業務嘅字段可能係「2026年第二季度企業客戶續費轉化率」,如果冇定義截斷、換行、列寬同 tooltip,卡片、表格、按鈕好易一齊變形。數據數量都係咁:AI 預設得幾行,但真實可能有 0 行或 300 行。0 行要有空狀態,300 行要分頁或者滾動。
好多 AI 頁面只寫 normal 狀態,但一個真正要交付嘅頁面至少要考慮 loading、empty、error、disabled 同 normal
- 訂單列表加載中唔可以白屏
- 冇訂單唔可以留一塊空白
- 接口報錯要有提示同重試
- 提交按鈕處理中唔畀用戶連續點
- 刪除要二次確認
- 篩選器係自動刷新定係點查詢?
移動端更明顯:桌面四個指標卡橫排冇問題,手機係兩列定單列?表格繼續橫向滾動定轉成卡片?呢啲冇講清楚,AI 好易默認桌面得就算搞掂。
UI Spec 唔係多寫一份文檔,係少畀 AI 亂猜
作者以前都會慳返 UI Spec 呢步,覺得叫 AI 寫咗頁面出嚟先,有問題再補。但後來發現前面慳落嘅嘢,幾乎都會喺返工度還返。而且叫 AI 改問題嗰陣,佢可能順手將原來啱嘅位改壞。
作者分享咗一個「UI Spec 生成提示詞」,可以叫 AI 幫手拆第一版 UI Spec。重點唔係一次寫完美,而係將容易漏嘅嘢暴露曬出嚟。拆完之後唔好即刻叫 AI 寫頁面,先檢查有冇漏狀態、漏字段、漏移動端。
UI Spec 呢步嘅價值唔止約束 AI,仲係逼自己將頁面補完整
一個簡單例子:SaaS Dashboard UI Spec
如果只係話「幫我做一個 SaaS Dashboard」,AI 多數都畀到一個頁面,但佢點拆你係唔放心嘅——佢可能放一堆隨機圖表、加啲冇意義卡片、自己編字段,最常見係淨係做 normal 狀態。如果先寫一份簡單 UI Spec,件事穩好多。
## 頁面名稱
SaaS Dashboard
## 頁面目標
畀用戶快速見到業務概覽、待處理任務同關鍵風險。
## 用戶主動作
查看關鍵指標,並進入待處理事項。
## 頁面模塊
1. 頂部導航
2. 核心指標卡片
3. 趨勢圖
4. 最近訂單表格
5. 待辦事項 / 風險提醒
## 核心指標卡片字段
- 今日收入
- 新增用戶
- 轉化率
- 待處理訂單
## 最近訂單表格字段
- 訂單編號
- 客戶名稱
- 金額
- 狀態
- 創建時間
- 操作
## 頁面狀態
- loading:展示骨架屏,唔好白屏
- empty:提示暫無數據,並畀出下一步動作
- error:展示錯誤提示同重試按鈕
- normal:展示真實數據
- disabled:提交中或權限不足時,按鈕唔可以點
## 響應式規則
- desktop:指標卡片 4 列展示
- tablet:指標卡片 2 列展示
- mobile:卡片單列堆疊,表格轉成卡片列表,唔準橫向溢出
## 驗收標準
- 主指標第一屏可見
- 長字段唔可以撐爆佈局
- 空數據唔可以留白
- 接口錯誤必須可重試
- 移動端唔可以橫向滾動
- 按鈕狀態同數據狀態要一致
呢個仲唔係代碼,但頁面已經清楚好多。AI 後面去實現就唔係憑感覺做一個「似 Dashboard 嘅頁面」,而係按照一份明確嘅頁面說明去寫。
DESIGN.md → UI Spec → Handoff.md → Codex/Cursor/Claude Code 實現頁面
寫喺最後:下一次唔好一嚟就叫 AI 寫代碼
DESIGN.md 寫咗但 AI 頁面一接數據就崩,唔係 DESIGN.md 冇用,而係佢管唔到呢層。真實頁面仲需要定義數據字段、頁面模塊、交互邏輯、loading、empty、error、響應式同驗收標準——呢啲嘢應該交畀 UI Spec。
下一篇預告:Handoff.md —— 點樣將 UI Spec 變成 Codex / Cursor 執行到嘅任務單。繼續跟進嘅話,可以留言話畀作者知你卡喺邊步。
哈佬,大家好,我係 Max King。
上篇寫 DESIGN.md 嘅時候,我其實有啲樂觀。
因為之前最令我煩惱嘅,係 AI 寫 UI 時風格亂咁飄。同一個項目入面,首頁仲係深色金融風,轉到設定頁突然變成白色極簡風;呢個頁面嘅按鈕圓角係一套,下一個頁面又換咗;卡片陰影、表格密度、字體大小,每次都好似重新開咗一個項目咁。
所以我當時嘅想法好簡單:首先將項目嘅設計規則寫低。顏色點用,按鈕點樣,卡片要咩風格,表格要緊湊定係舒展,邊啲效果唔好出現,全部放喺 DESIGN.md 度。至少先等 AI 唔好每次都自由發揮。
呢個方向冇錯。
但繼續做落去嘅時候,我發現事情冇咁簡單。風格係穩定咗啲,按鈕、卡片、顏色呢啲冇咁亂。但係頁面一接近真實數據,新問題即刻出嚟。
我而家測試 AI 頁面,會故意將 mockData 裏面嘅欄位拉長少少,表格塞多幾列,列表數據改成 0 條,再模擬一個接口報錯。然後你會好容易見到問題:客戶名一長,卡片就被撐開;表格多兩列,頁面開始橫向滾動;冇數據嗰陣,中間空咗喺度;接口報錯嗰陣,個頁面又唔知俾用戶睇咩好。
更尷尬嘅係,桌面端仲勉強睇到,但換成手機尺寸,好多時就直接冧咗。
DESIGN.md 可以令 AI 知道呢個項目「應該係咩樣」,但佢唔知呢個頁面「實際上要點樣行得鬱」。
呢兩個問題,唔可以溝埋一齊。

01
-MaxKing.cc-
風格統一咗,唔代表頁面用得
DESIGN.md 管嘅係項目整體風格。例如一個後台系統,究竟係 dark fintech,定係 clean SaaS;主色點用,字體層級點分,卡片要唔要陰影,表格係高密度定係留白多啲,按鈕係剋制啲定係強調行動,呢啲都適合放喺 DESIGN.md 度。
佢都適合寫一啲禁忌。例如唔好 cyberpunk,唔好過度霓虹,唔好將後台頁面做成展示大屏,唔好為咗視覺效果犧牲可讀性。
呢啲寫清楚之後,AI 後面係會乖啲。
但係具體到某個頁面,問題即刻變得仔細。一個訂單列表頁,唔單止要「睇落似訂單列表」。佢仲要知道表格有咩欄位,欄位有冇可能為空,訂單狀態有幾種,狀態文案會唔會好長,數據加載中顯示咩,接口失敗後可唔可以重試,刪除按鈕需唔需要二次確認,移動端仲適唔適合繼續用表格。
呢啲唔屬於項目整體風格。
佢哋屬於頁面結構、數據規則同運行狀態。DESIGN.md 唔會自動補充呢啲資訊。你唔寫,AI 就只能根據佢對「一個正常後台頁面」嘅默認理解去估。
問題就係呢度:AI 估出嚟嘅頁面,第一眼可能似,但一接數據就未必用得。
02
-MaxKing.cc-
AI 好容易只係做出「演示態頁面」
我而家更願意將好多 AI 生成嘅頁面叫做「演示態頁面」。
佢唔係完全冇用。佢可以幫你睇到大約佈局,睇到風格方向,甚至快速做一個 Demo。但佢默認展示嘅係最順眼嘅一種狀態:有數據,欄位唔長,表格啱啱好幾行,按鈕都撳得,圖表裏面都有內容,屏幕寬度又啱啱係桌面端。
呢個狀態好容易好睇。
真實項目麻煩嘅地方,正正唔係呢個狀態。接口慢嘅時候,頁面唔可以白屏;冇數據嘅時候,唔可以空咗一塊;接口報錯嘅時候,要話俾用戶知發生咩事,最好仲可以重試;欄位過長嘅時候,要決定係截斷、換行、tooltip,定係等列寬自動調整;用戶權限不足嘅時候,按鈕應該禁用,而唔係繼續擺喺度等㩒。
呢啲都唔係視覺風格問題。
呢個亦都係點解好多頁面截圖睇落還可以,但真正接接口、接權限、接移動端嗰陣就開始出事。唔係 AI 唔識寫 CSS,而係佢一開始收到嘅任務裏面,就冇定義呢啲邊界。
03
-MaxKing.cc-
我而家睇 AI 頁面,會先睇數據同狀態

以前我都會先睇頁面似唔似參考圖。而家都會睇,但唔會淨係睇呢樣。
我會故意將一啲數據改差少少。例如將 customerName 換成 30 個字以上,將表格裏面嘅 status 增加幾個更長嘅枚舉文案,將某個金額欄位改成空值,將列表數據改成 0 條,再將接口狀態改成 loading 和 error。
呢啲測試唔複雜,但好快就睇到頁面係咪只係做咗一個好靚嘅靜態殼。
欄位長度係最容易暴露問題嘅地方。設計圖裏面寫「今日收入」「新增用戶」「訂單狀態」,呢啲欄位都好短,點擺都舒服。真實業務裏面,欄位可能係「2026 年第二季度企業客戶續費轉化率」,亦可能係「超過 SLA 嘅待處理異常訂單」。如果冇提前定義截斷、換行、列寬同 tooltip,卡片、表格、按鈕好容易一齊變形。
數據數量都係一樣。AI 默認畫出嚟嘅表格,往往得幾行,睇落好乾淨。但真實頁面可能冇數據,亦可能有幾百行。0 行嗰陣要有空狀態,300 行嗰陣要分頁或者滾動,列好多嘅時候仲要考慮固定操作列。DESIGN.md 可以規定表格嘅視覺風格,但唔會話俾 AI 知冇數據嗰陣點處理,亦唔會話俾 AI 知超過幾多行應該分頁。
狀態更加容易漏。好多 AI 頁面只寫 normal 狀態,即係「有數據嗰陣嘅樣」。但一個真正要交付嘅頁面,至少要考慮 loading、empty、error、disabled 同 normal。訂單列表加載中唔可以白屏,冇訂單唔可以留一塊空白,接口報錯要有提示同重試,提交按鈕處理中唔可以俾用戶連續撳。
按鈕邏輯都唔可以淨係睇有冇按鈕。「查看詳情」係跳轉定係彈窗?「刪除」要唔要二次確認?「導出」喺冇數據嗰陣可唔可以撳?篩選器係自動刷新,定係㩒查詢?呢啲如果唔寫清楚,AI 一係空咗,一係自己作。最後頁面睇落似產品,但撳起嚟唔似產品。
移動端就更明顯。桌面端四個指標卡橫排冇問題,但手機上係兩列定係單列?表格繼續橫向滾動,定係轉成卡片?篩選器要唔要摺疊?圖表高度點處理?呢啲如果冇提前講明,AI 好容易默認桌面端睇到就算完成。
頁面第一眼靚,只係代表佢完成咗展示狀態。但可唔可以接真實數據,先至知佢有冇進入產品狀態。
04
-MaxKing.cc-
UI Spec 唔係多寫一份文檔,而係少啲俾 AI 估
我以前都會慳返 UI Spec 呢一步。
諗法好正常:首先等 AI 將頁面寫出嚟,行得鬱先算。真係爭啲嘢,再叫佢補。
但之後會發現,前面慳返嘅嘢,基本上都會喺返工裏面還返出嚟。你會不斷咁補:呢度冇 empty,嗰度冇 loading,呢個欄位唔應該咁樣展示,嗰個按鈕唔可以直接撳,移動端佈局冧咗,接口錯誤冇處理。
更麻煩嘅係,你叫 AI 改呢啲問題嗰陣,佢可能順手將原本啱嘅地方改錯。尤其係 UI 相關修改,好多時唔係淨係改一塊,而係將佈局、間距、組件結構一齊鬱。
所以我而家會喺寫 code 前加多一步:先叫 AI 將頁面拆成 UI Spec。
UI Spec 唔係 code,亦唔係設計圖。佢更加似係頁面說明書。
呢兩層要分開。
DESIGN.md 管顏色、字體、間距、圓角、組件風格。UI Spec 管頁面目標、模組、欄位、狀態、交互、響應式同驗收標準。
05
-MaxKing.cc-
可以先叫 AI 拆一版 UI Spec
第一次唔使寫得好重。
你可以先將下面呢段發俾 AI,叫佢幫你拆一版 UI Spec。重點唔係一次過寫完美,而係先將容易漏嘅嘢暴露出來。
拆完之後,唔好即刻叫 AI 寫頁面。
先檢查佢有冇漏狀態、漏欄位、漏移動端。好多時你會發現,唔係 AI 冇諗清楚,而係你自己都冇將頁面諗清楚。UI Spec 呢一步嘅價值,唔單止係約束 AI,亦係逼自己將頁面補完整。
06
-MaxKing.cc-
一個簡單例子
例如我要做一個 SaaS 後台首頁。
如果淨係話「幫我做一個 SaaS Dashboard」,AI 多數都會俾一個頁面。但佢點樣拆,我係唔放心嘅。佢可能放一大堆隨機圖表,可能加啲冇意義嘅卡片,亦可能自己作欄位。更常見嘅係,佢只做 normal 狀態,空數據同錯誤狀態完全冇。
如果先寫一份簡單 UI Spec,件事會穩定好多。
呢個仲未係 code。
但係頁面已經清楚好多。AI 後面再去實現,就唔係憑感覺做一個「似 Dashboard 嘅頁面」,而係跟住一個明確嘅頁面說明去寫。

DESIGN.md
↓
UI Spec
↓
Handoff.md
↓
Codex / Cursor / Claude Code 實現頁面
07
-MaxKing.cc-
寫喺最後
所以返返去標題呢個問題:
DESIGN.md 都寫咗,點解 AI 頁面仲係一接數據就冧?
唔係 DESIGN.md 冇用。佢只係管唔到呢一層。
佢管嘅係風格。
真實頁面仲需要定義數據欄位、頁面模組、交互邏輯、loading、empty、error、響應式同驗收標準。呢啲嘢,應該交畀 UI Spec。
下一次做 AI 頁面時,我唔會一開波就叫佢寫 code。我會先叫佢做一件事:
將呢個頁面拆成 UI Spec。
我更想收集真實場景
如果你都係用 AI 做頁面,可以喺評論區講嚇:你而家最容易卡喺邊一步?係 AI 出圖、code 還原、接數據,定係之後嘅修改?
我之後會揀一啲典型場景,匿名拆成文章繼續覆盤。
下一篇預告
下一篇我會繼續講 Handoff.md:點樣將 UI Spec 變成 Codex / Cursor 執行到嘅任務單。
- END -
關於 MaxKing 寶藏
我係 MaxKing,全棧開發者、量化交易實踐者,亦係 AI 重度用戶。呢度分享嘅唔係遙遠概念,而係我真實使用、搭建同踩坑之後留低嘅判斷。
之後我會繼續記錄 AI 點樣進入真實開發、產品交付、知識管理同自動化工作流。
哈嘍,大家好,我是 Max King。
上一篇寫 DESIGN.md 的時候,我其實有點樂觀。
因為之前讓我最煩的,是 AI 寫 UI 時風格亂飄。同一個項目裏,首頁還是深色金融風,換到設置頁突然變成白色極簡風;這個頁面按鈕圓角是一套,下一個頁面又換了;卡片陰影、表格密度、字體大小,每次都像重新開了一個項目。
所以我當時的想法很簡單:先把項目的設計規則寫下來。顏色怎麼用,按鈕怎麼長,卡片要什麼風格,表格要緊湊還是舒展,哪些效果不要出現,全部放到 DESIGN.md 裏。至少先讓 AI 別每次都自由發揮。
這個方向沒有錯。
但繼續往下做頁面的時候,我發現事情沒這麼簡單。風格確實穩了一點,按鈕、卡片、顏色這些東西沒那麼亂了。可是頁面一接近真實數據,新的問題馬上冒出來了。
我現在測試 AI 頁面,會故意把 mockData 裏的字段拉長一點,把表格多塞幾列,把列表數據改成 0 條,再模擬一個接口報錯。然後你會很容易看到問題:客戶名一長,卡片就被撐開;表格多兩列,頁面開始橫向滾動;沒有數據時,中間空在那裏;接口報錯時,頁面也不知道該給用戶看什麼。
更尷尬的是,桌面端還能勉強看,換到手機尺寸,經常就直接塌了。
DESIGN.md 能讓 AI 知道這個項目“應該長什麼樣”,但它不知道這個頁面“實際要怎麼跑起來”。
這兩個問題,不能混在一起。

01
-MaxKing.cc-
風格統一了,不代表頁面能用
DESIGN.md 管的是項目整體風格。比如一個後台系統,到底是 dark fintech,還是 clean SaaS;主色怎麼用,字體層級怎麼分,卡片要不要陰影,表格是高密度還是留白多一點,按鈕是剋制一點還是強調行動,這些都適合放在 DESIGN.md 裏。
它也適合寫一些禁忌。比如不要賽博朋克,不要過度霓虹,不要把後台頁面做成展示大屏,不要為了視覺效果犧牲可讀性。
這些寫清楚以後,AI 後面確實會老實一點。
但具體到某一個頁面,問題馬上就變細了。一個訂單列表頁,不只是要“看起來像訂單列表”。它還要知道表格有哪些字段,字段是否可能為空,訂單狀態有幾種,狀態文案是否會很長,數據加載中顯示什麼,接口失敗後是否允許重試,刪除按鈕是否需要二次確認,移動端還適不適合繼續用表格。
這些不屬於項目整體風格。
它們屬於頁面結構、數據規則和運行狀態。DESIGN.md 不會自動補這些信息。你不寫,AI 就只能按它對“一個正常後台頁面”的默認理解去猜。
問題就在這裏:AI 猜出來的頁面,第一眼可能像,但一接數據就不一定能用。
02
-MaxKing.cc-
AI 很容易只做出“演示態頁面”
我現在更願意把很多 AI 生成的頁面叫做“演示態頁面”。
它不是完全沒用。它能幫你看到大概佈局,看到風格方向,甚至能快速做一個 Demo。但它默認展示的是最順眼的一種狀態:有數據,字段不長,表格剛好幾行,按鈕都能點,圖表裏也有內容,屏幕寬度也剛好是桌面端。
這個狀態很容易好看。
真實項目麻煩的地方,恰好不在這個狀態。接口慢的時候,頁面不能白屏;沒有數據的時候,不能空着一塊;接口報錯的時候,要告訴用戶發生了什麼,最好還能重試;字段過長的時候,要決定是截斷、換行、tooltip,還是讓列寬自動調整;用戶權限不足的時候,按鈕應該禁用,而不是繼續擺在那裏讓人點。
這些都不是視覺風格問題。
這也是為什麼很多頁面截圖看起來還可以,但真正接接口、接權限、接移動端時就開始出事。不是 AI 不會寫 CSS,而是它一開始拿到的任務裏,就沒有定義這些邊界。
03
-MaxKing.cc-
我現在看 AI 頁面,會先看數據和狀態

以前我也會先看頁面像不像參考圖。現在還是會看,但不會只看這個。
我會故意把一些數據改壞一點。比如把 customerName 換成 30 個字以上,把表格裏的 status 增加幾個更長的枚舉文案,把某個金額字段改成空值,把列表數據改成 0 條,再把接口狀態改成 loading 和 error。
這些測試不復雜,但很快就能看出頁面是不是隻做了一個好看的靜態殼。
字段長度是最容易暴露問題的地方。設計圖裏寫“今日收入”“新增用戶”“訂單狀態”,這些字段都很短,怎麼放都舒服。真實業務裏,字段可能是“2026 年第二季度企業客戶續費轉化率”,也可能是“超過 SLA 的待處理異常訂單”。如果沒有提前定義截斷、換行、列寬和 tooltip,卡片、表格、按鈕很容易一起變形。
數據數量也是一樣。AI 默認畫出來的表格,往往只有幾行,看起來很乾淨。但真實頁面可能沒有數據,也可能有幾百行。0 行時要有空狀態,300 行時要分頁或者滾動,列很多時還要考慮固定操作列。DESIGN.md 可以規定表格的視覺風格,但不會告訴 AI 沒有數據時怎麼處理,也不會告訴 AI 超過多少行應該分頁。
狀態更容易漏。很多 AI 頁面只寫 normal 狀態,也就是“有數據時的樣子”。但一個真正要交付的頁面,至少要考慮 loading、empty、error、disabled 和 normal。訂單列表加載中不能白屏,沒有訂單不能留一塊空白,接口報錯要有提示和重試,提交按鈕處理中不能讓用戶連續點。
按鈕邏輯也不能只看有沒有按鈕。“查看詳情”是跳轉還是彈窗?“刪除”要不要二次確認?“導出”在沒有數據時能不能點?篩選器是自動刷新,還是點查詢?這些如果不寫清楚,AI 要麼空着,要麼自己編。最後頁面看起來像產品,點起來不像產品。
移動端就更明顯了。桌面端四個指標卡橫排沒有問題,但手機上是兩列還是單列?表格繼續橫向滾動,還是轉成卡片?篩選器要不要摺疊?圖表高度怎麼處理?這些如果沒有提前說明,AI 很容易默認桌面端能看就算完成。
頁面第一眼漂亮,只能說明它完成了展示狀態。能不能接真實數據,才知道它有沒有進入產品狀態。
04
-MaxKing.cc-
UI Spec 不是多寫一份文檔,而是少讓 AI 猜
我以前也會省掉 UI Spec 這一步。
想法很正常:先讓 AI 把頁面寫出來,跑起來再說。真缺什麼,再讓它補。
但後面會發現,前面省掉的東西,基本都會在返工裏還回來。你會不斷補:這裏沒有 empty,那裏沒有 loading,這個字段不該這樣展示,那個按鈕不能直接點,移動端佈局崩了,接口錯誤沒處理。
更麻煩的是,你讓 AI 修這些問題時,它可能順手把原來對的地方改壞。尤其是 UI 相關修改,經常不是隻改一塊,而是把佈局、間距、組件結構一起帶着動。
所以我現在會在寫代碼前加一步:先讓 AI 把頁面拆成 UI Spec。
UI Spec 不是代碼,也不是設計圖。它更像頁面說明書。
這兩層要分開。
DESIGN.md 管顏色、字體、間距、圓角、組件風格。UI Spec 管頁面目標、模塊、字段、狀態、交互、響應式和驗收標準。
05
-MaxKing.cc-
可以先讓 AI 拆一版 UI Spec
第一次不用寫得很重。
你可以先把下面這段發給 AI,讓它幫你拆一版 UI Spec。重點不是一次寫完美,而是先把容易漏的東西暴露出來。
拆完以後,不要馬上讓 AI 寫頁面。
先檢查它有沒有漏狀態、漏字段、漏移動端。很多時候你會發現,不是 AI 沒想清楚,是你自己也沒把頁面想清楚。UI Spec 這一步的價值,不只是約束 AI,也是在逼自己把頁面補完整。
06
-MaxKing.cc-
一個簡單例子
比如我要做一個 SaaS 後台首頁。
如果只說“幫我做一個 SaaS Dashboard”,AI 多半也能給一個頁面。但它怎麼拆,我是不放心的。它可能放一堆隨機圖表,可能加一些沒意義的卡片,也可能自己編字段。更常見的是,它只做 normal 狀態,空數據和錯誤狀態完全沒有。
如果先寫一份簡單 UI Spec,事情會穩很多。
這還不是代碼。
但頁面已經清楚很多了。AI 後面再去實現,就不是憑感覺做一個“像 Dashboard 的頁面”,而是在按一個明確的頁面說明往下寫。

DESIGN.md
↓
UI Spec
↓
Handoff.md
↓
Codex / Cursor / Claude Code 實現頁面
07
-MaxKing.cc-
寫在最後
所以回到標題這個問題:
DESIGN.md 都寫了,AI 頁面為什麼還是一接數據就崩?
不是 DESIGN.md 沒用。它只是管不到這一層。
它管的是風格。
真實頁面還需要定義數據字段、頁面模塊、交互邏輯、loading、empty、error、響應式和驗收標準。這些東西,應該交給 UI Spec。
下一次做 AI 頁面時,我不會一上來就讓它寫代碼。我會先讓它做一件事:
把這個頁面拆成 UI Spec。
我更想收集真實場景
如果你也在用 AI 做頁面,可以在評論區說一下:你現在最容易卡在哪一步?是 AI 出圖、代碼還原、接數據,還是後續修改?
我後面會挑一些典型場景,匿名拆成文章繼續覆盤。
下一篇預告
下一篇我繼續講 Handoff.md:怎麼把 UI Spec 變成 Codex / Cursor 能執行的任務單。
- END -
關於 MaxKing寶藏
我是 MaxKing,全棧開發者、量化交易實踐者,也是 AI 重度用戶。這裏分享的不是遙遠概念,而是我在真實使用、搭建和踩坑後留下的判斷。
後面我會繼續記錄 AI 如何進入真實開發、產品交付、知識管理和自動化工作流。