DESIGN.md 都寫了,AI 頁面為什麼還是一接數據就崩?

作者:MaxKing寶藏
日期:2026年5月23日 上午11:52
來源:WeChat 原文

整理版優先睇

速讀 5 個重點 高亮

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單列堆疊)同驗收標準(長字段唔撐爆、空數據有提示、接口錯誤可重試)。
值得記低
Prompt

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. 1 客戶名一長,卡片就會被撐開
  2. 2 表格多兩列,頁面就開始橫向滾動
  3. 3 冇數據嗰陣,中間就空喺度
  4. 4 接口報錯時,頁面唔知畀用戶睇咩
  5. 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 UI Spec 示例 markdown
## 頁面名稱
SaaS Dashboard

## 頁面目標
畀用戶快速見到業務概覽、待處理任務同關鍵風險。

## 用戶主動作
查看關鍵指標,並進入待處理事項。

## 頁面模塊
1. 頂部導航
2. 核心指標卡片
3. 趨勢圖
4. 最近訂單表格
5. 待辦事項 / 風險提醒

## 核心指標卡片字段
- 今日收入
- 新增用戶
- 轉化率
- 待處理訂單

## 最近訂單表格字段
- 訂單編號
- 客戶名稱
- 金額
- 狀態
- 創建時間
- 操作

## 頁面狀態
- loading:展示骨架屏,唔好白屏
- empty:提示暫無數據,並畀出下一步動作
- error:展示錯誤提示同重試按鈕
- normal:展示真實數據
- disabled:提交中或權限不足時,按鈕唔可以點

## 響應式規則
- desktop:指標卡片 4 列展示
- tablet:指標卡片 2 列展示
- mobile:卡片單列堆疊,表格轉成卡片列表,唔準橫向溢出

## 驗收標準
- 主指標第一屏可見
- 長字段唔可以撐爆佈局
- 空數據唔可以留白
- 接口錯誤必須可重試
- 移動端唔可以橫向滾動
- 按鈕狀態同數據狀態要一致

呢個仲唔係代碼,但頁面已經清楚好多。AI 後面去實現就唔係憑感覺做一個「似 Dashboard 嘅頁面」,而係按照一份明確嘅頁面說明去寫。

DESIGN.md → UI SpecHandoff.mdCodex/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 嘅分別

DESIGN.md
呢個項目整體應該係咩樣。

UI Spec
呢個頁面究竟由咩組成,數據點樣嚟,狀態點樣變,異常情況點樣處理。

我嘅理解
DESIGN.md 係為咗令 AI 唔好亂設計。UI Spec 係為咗令 AI 唔好亂拆頁面。

呢兩層要分開。

DESIGN.md 管顏色、字體、間距、圓角、組件風格。UI Spec 管頁面目標、模組、欄位、狀態、交互、響應式同驗收標準。

05

-MaxKing.cc-

可以先叫 AI 拆一版 UI Spec


第一次唔使寫得好重。

你可以先將下面呢段發俾 AI,叫佢幫你拆一版 UI Spec。重點唔係一次過寫完美,而係先將容易漏嘅嘢暴露出來。

UI Spec 生成提示詞

請先唔好寫 code。

請根據下面嘅頁面需求,幫我拆一份 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,唔好直接輸出 code。

拆完之後,唔好即刻叫 AI 寫頁面。

先檢查佢有冇漏狀態、漏欄位、漏移動端。好多時你會發現,唔係 AI 冇諗清楚,而係你自己都冇將頁面諗清楚。UI Spec 呢一步嘅價值,唔單止係約束 AI,亦係逼自己將頁面補完整。

06

-MaxKing.cc-

一個簡單例子


例如我要做一個 SaaS 後台首頁。

如果淨係話「幫我做一個 SaaS Dashboard」,AI 多數都會俾一個頁面。但佢點樣拆,我係唔放心嘅。佢可能放一大堆隨機圖表,可能加啲冇意義嘅卡片,亦可能自己作欄位。更常見嘅係,佢只做 normal 狀態,空數據同錯誤狀態完全冇。

如果先寫一份簡單 UI Spec,件事會穩定好多。

SaaS Dashboard UI Spec 示例

頁面名稱
SaaS Dashboard

頁面目標
令用戶快速睇到業務概覽、待處理任務同關鍵風險。

用戶主動作
睇關鍵指標,並進入待處理事項。

頁面模組
1. 頂部導航
2. 核心指標卡片
3. 趨勢圖
4. 最近訂單表格
5. 待辦事項 / 風險提醒

核心指標卡片欄位
- 今日收入
- 新增用戶
- 轉化率
- 待處理訂單

最近訂單表格欄位
- 訂單編號
- 客戶名稱
- 金額
- 狀態
- 創建時間
- 操作

頁面狀態
loading:顯示骨架屏,唔好白屏。
empty:提示暫無數據,並俾出下一步動作。
error:顯示錯誤提示同重試按鈕。
normal:顯示真實數據。
disabled:提交中或權限不足時,按鈕唔可以撳。

響應式規則
desktop:指標卡片 4 列顯示。
tablet:指標卡片 2 列顯示。
mobile:卡片單列疊起,表格轉成卡片列表,唔允許橫向溢出。

驗收標準
主指標第一屏睇到。
長欄位唔可以撐爆佈局。
空數據唔可以留白。
接口錯誤一定要可以重試。
移動端唔可以有橫向滾動。
按鈕狀態要同數據狀態一致。

呢個仲未係 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 的區別

DESIGN.md
這個項目整體應該長什麼樣。

UI Spec
這個頁面到底由什麼組成,數據怎麼來,狀態怎麼變,異常情況怎麼處理。

我的理解
DESIGN.md 是為了讓 AI 不要亂設計。UI Spec 是為了讓 AI 不要亂拆頁面。

這兩層要分開。

DESIGN.md 管顏色、字體、間距、圓角、組件風格。UI Spec 管頁面目標、模塊、字段、狀態、交互、響應式和驗收標準。

05

-MaxKing.cc-

可以先讓 AI 拆一版 UI Spec


第一次不用寫得很重。

你可以先把下面這段發給 AI,讓它幫你拆一版 UI Spec。重點不是一次寫完美,而是先把容易漏的東西暴露出來。

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,不要直接輸出代碼。

拆完以後,不要馬上讓 AI 寫頁面。

先檢查它有沒有漏狀態、漏字段、漏移動端。很多時候你會發現,不是 AI 沒想清楚,是你自己也沒把頁面想清楚。UI Spec 這一步的價值,不只是約束 AI,也是在逼自己把頁面補完整。

06

-MaxKing.cc-

一個簡單例子


比如我要做一個 SaaS 後台首頁。

如果只說“幫我做一個 SaaS Dashboard”,AI 多半也能給一個頁面。但它怎麼拆,我是不放心的。它可能放一堆隨機圖表,可能加一些沒意義的卡片,也可能自己編字段。更常見的是,它只做 normal 狀態,空數據和錯誤狀態完全沒有。

如果先寫一份簡單 UI Spec,事情會穩很多。

SaaS Dashboard 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 實現頁面

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 如何進入真實開發、產品交付、知識管理和自動化工作流。