Communitygithub.com

s0xDk/refactoring-ui-skill

使用 Refactoring UI (Wathan & Schoger) 的具體規則來設計和改善使用者介面 — 包含受限的間距/字型/顏色/陰影比例、透過粗細和顏色而非尺寸來建立視覺層次,以及透過模擬光線來創造深度。適用於建構或設計任何 UI(網頁、應用程式、儀表板、登陸頁面、元件)、選擇字型大小、間距、顏色、陰影或邊框半徑、設計調色盤或設計符號,以及每當有人說 UI「看起來不對勁」、「看起來業餘」、「感覺雜亂/平淡/未完成」,或要求「讓這個看起來更好看」時。

refactoring-ui-skill 是什麼?

這個 AI 助手技能是將《Refactoring UI》一書(Wathan & Schoger 著作)中的視覺設計原則,編碼成一套具體、可操作的規則。它提供了一系列預先定義的系統(間距、字型、顏色、陰影、行高和邊框半徑),旨在消除臨時且不一致的設計決策,這些決策是業餘 UI 外觀的主要原因。該技能不僅定義了這些比例,還概述了一個逐步設計流程,強調從功能而非佈局開始、先以灰階工作、以及優先考慮視覺層次(透過粗細和顏色對比,而非僅依賴字型大小)的技巧。 它支援所有 UI 建構平台(Web、應用程式等),並以 Markdown 格式提供,可導入到支援技能的 AI 編碼工具(如 Claude Code、Cursor、Codex)中。其中包含可實際參考的文件,例如一個完整的 CSS 自訂屬性集(assets/tokens.css),其中包含經過對比度驗證的設計符號,以及用於建立調色盤、診斷現有 UI 問題和實現高階陰影技巧的故障排除指南。該技能的核心價值在於為「讓 UI 看起來更好看」提供一個系統性的方法,將其從主觀品味轉變為可重複的工程過程。

相容平台~Claude Code~Codex CLI~Cursor
npx skills add s0xDk/refactoring-ui-skill

在你喜歡的 AI 中提問

開啟一個已預先載入此 Agent Skill 的新對話。

說明文件

Refactoring UI

視覺設計不是天賦。它是一小套只需決定一次的系統決策,加上少數用來建立層次的技巧。這個技能就是那些系統和那些技巧。

導致業餘 UI 的最大原因就是隨意選值 — 這裡 17px,那裡 #3B82F6,懸停狀態用 lighten(5%)。永遠從一個比例開始設計。


系統 — 使用這些,不要重新推導它們

從這些列表中挑選。永遠不要發明一個不在列表裡的值。

間距和尺寸

以 16px 為基礎,由其因數和倍數建構而成:

4  8  12  16  24  32  48  64  96  128  192  256  384  512  640  768

小端緊湊,大端擴張。相鄰兩個值的差距不得小於約 25% — 這樣才能使選擇一目了然。線性的「4 的倍數」比例會失敗:它無法幫助你在 120px 和 124px 之間做出決定。

將它用於外邊距、內邊距、寬度、高度、圖示大小、邊框寬度 — 所有空間相關的屬性。也要固定一組少數的不透明度值(例如 .05 .1 .2 .4 .6 .8),用於禁用狀態、疊加層和懸停色調,而不是每次都靠目測滑桿。邏輯與其他比例相同:決定一次,到處重用。

字型比例

12  14  16  18  20  24  30  36  48  60  72

不是根據比例(4:5、2:3、黃金比例)構建的模數比例。那些會產生小數像素值,在不同瀏覽器中四捨五入不一致,且對於介面密度來說過於稀疏 — 改用手動挑選的值,依照它們給人的感覺來選擇,效果更好。

單位:僅限 px 或 rem。永遠不要用 em。 em 相對於當前字型大小,因此一個在 1.25em 父元素內的 .875em 會計算出 17.5px — 這不在你的比例中。這個比例就悄悄地不復存在了。

字型粗細

兩種粗細就夠了:

  • 400 或 500 — 內文和大多數 UI 文字
  • 600 或 700 — 任何需要強調的內容

在 UI 中,不要使用低於 400 的粗細。要降低強調程度,請使用較淺的顏色或較小的尺寸 — 絕對不要使用更輕的粗細。

顏色

你需要遠比五色調色盤產生器能提供的更多顏色。

  • 灰色:8–10 種色調。 UI 幾乎全是灰色 — 文字、背景、面板、邊框、表單控制項。三四種色調總是不夠。從一個非常深的灰色開始,而不是真正的黑色(真正的黑色看起來不自然)。
  • 主色:5–10 種色調,一種或可能兩種主色。
  • 強調色:每種 5–10 種色調 — 破壞性紅色、警告黃色、正面綠色,再加上產品需要用來區分的任何其他顏色(圖表系列、日曆事件、標籤)。對於複雜的 UI 來說,十種顏色 × 5–10 種色調是正常的。

將它們命名為 100(最淺)→ 900(最深),基礎色為 500。

按此順序建構比例: 先挑選 500(對於主色/強調色,它應該是可以用作按鈕背景的色調)。然後找出邊界 — 900 通常是你的文字顏色,100 是背景色調;一個警示元件會同時用到這兩者,所以設計一個並從中讀出這兩個值。然後填入 700 和 300,作為其相鄰值之間的完美折衷,然後以同樣方式填入 800 600 400 200。

使用 HSL 而非十六進位來撰寫顏色。 hsl(220, 95%, 34%) 和 hsl(220, 65%, 61%) 在視覺上有關聯;而 #03369E 和 #507DD7 則不然。

永遠不要在執行時期產生色調,使用 lighten() / darken()。那樣做只會讓你得到 35 種稍微不同的藍色。

陰影 — 五個層級

0 1px 3px  hsla(0,0%,0%,.2)   /* 幾乎沒有浮起 — 按鈕 */
0 4px 6px  hsla(0,0%,0%,.2)   /* 下拉選單 */
0 5px 15px hsla(0,0%,0%,.2)
0 10px 24px hsla(0,0%,0%,.2)
0 15px 35px hsla(0,0%,0%,.2)  /* 模態框 */

選擇的方法是問自己「這個東西在 Z 軸上位於何處?」,而不是「哪個陰影看起來不錯?」。離使用者越近 = 越多注意力。在 :active 時縮小按鈕的陰影會讓它感覺被按下;當列表項被拿起進行拖曳重新排序時,增加其陰影則反其道而行 — 它被解讀為「現在在其兄弟元素之上」,同時也充當了拖曳操作的提示。

這五個是預設值,在大多數情況下都沒問題。references/techniques.md 提供了同一個比例的雙層精煉版本 — 平行但非完全相同的值(其頂層更重)。當陰影在設計中很突出時使用該版本;當它們不突出時使用這些。不要在一個專案中混用兩者。

行高與行長

行高與字型大小成反比,與行寬成正比:

  • 小文字 / 寬欄 → 1.5 到 2
  • 大標題 → 1 就可以了

行長:45–75 個字符,即 max-width: 20em–35em。這適用於段落,即使其周圍的容器更寬 — 在一個內容區域中混合寬度會看起來更精緻,而不是更糟。

(這裡使用 em 是正確的 — 測量值應與其包裹的文字一起縮放。「永遠不要用 em」的規則範圍僅限於字型比例,在該比例中 em 會因巢狀而複合。不要「修正」這個。)

邊框半徑

選擇一個並保持一致。小半徑 = 中性。大半徑 = 俏皮。無半徑 = 嚴肅/正式。在同一個介面中混合方形和圓角看起來總是更糟。


流程

1. 從功能開始,而不是佈局。 不要設計「應用程式」— 在你知道產品裡有什麼之前,你無法在頂部導航和側邊欄之間做出決定。設計一個真實的功能部分(搜尋表單、訊息撰寫器),然後讓整體結構自然浮現。

2. 細節稍後再處理。 早期忽略字型、陰影和圖示。先以灰階工作 — 這迫使層次來自間距、對比度和尺寸,而非顏色。一旦佈局可行再加入顏色。

3. 不要過度投資於低保真度。 草圖、線框圖和模型都是可拋棄的 — 沒有人能使用應用程式的靜態圖片。它們的存在是為了探索想法;一旦做出決定就捨棄它們,然後去建構真實的東西。

4. 設計最小可用的版本,然後建構它。 以設計→程式碼的短週期工作。不要暗示你還沒準備好要建構的功能 — 一個帶有你還無法上線的附件區的評論框會阻塞整個功能。錦上添花的功能稍後再設計。

5. 透過排除法來選擇。 當從比例中挑選一個值時:猜測你認為對的那個,然後將它與兩邊相鄰的值進行比較。其中有兩個會明顯錯誤。如果外側的選項勝出,則以該值作為新的中間值重新進行比較。

6. 從過多的空白開始,然後再移除它。 增加空間直到某物看起來不錯為止,會給你最小值。從寬裕開始然後修剪,會給你正確的量。密集的 UI(儀表板)是合理的 — 但這是一個刻意的決定,而不是預設值。

7. 縮小畫布。 在 1400px 的畫板上設計一個小組件往往會蔓延,因為有空間可以填滿。從 ~400px 開始,先在真正有約束條件的地方設計行動版佈局 — 然後再將它放到大螢幕上,只放鬆那些真正感到擁擠的地方。你會發現需要改變的部分比你預期的少。


層次 — 效果最顯著的技巧

螢幕上的所有東西都位於一個金字塔中:主要、次要、第三級。當所有東西都在競爭時,UI 看起來就像雜訊。這就是讓設計看起來「經過設計」的原因 — 而不是風格。

尺寸不是一切。 僅依賴字型大小會讓你得到太大的主要內容和太小的次要內容。改用粗細和顏色來傳達強調,並保持尺寸合理。

最多三種文字顏色:

  • 深色 — 主要內容
  • 灰色 — 次要內容
  • 更淺的灰色 — 第三級內容(腳註、版權資訊)

這三種顏色都可以承載實際的正文大小文字,因此都需要 4.5:1 的對比度。「更淺的灰色」指的是仍然能滿足此對比度的最淺色調 — 大致上是 9 階漸層的中間,而不是淺色端。淺色調僅用於禁用狀態和大文字。

透過降低強調來強調。 當重要的元素無法脫穎而出,而且沒有更多東西可以添加到它時,改為淡化與它競爭的元素。淡化非活躍的導航項目;降低側邊欄的背景顏色,使主要內容向前突出。

操作按鈕: 根據層次而非語義來設定樣式。

  • 主要 → 實心,高對比度。通常每頁只有一個。
  • 次要 → 輪廓線,或低對比度背景。
  • 第三級 → 樣式像連結一樣。

破壞性 ≠ 大紅色按鈕。如果「刪除」不是頁面上的主要操作,就給它第三級處理 — 然後在確認對話框內部讓它變成一個大紅色的主要按鈕,在那裡它確實是主要操作。

標籤是最後的手段。 標籤:值 給每一段資料相同的重要性。大多數資料可以透過其格式($19.99、電子郵件地址)或上下文來自動識別。當確實需要標籤時,將其合併到值中(「庫存剩餘 12 件」,而不是「庫存:12」),或者將其作為明顯的次要內容添加。例外情況:在規格表風格的頁面上,使用者會搜尋標籤,此時應改為強調標籤。

平衡粗細與對比度。 實心圖示在視覺上很重,會蓋過旁邊的文字 — 降低它們的顏色飽和度來補償。反過來也適用:當 1px 的邊框在柔和顏色中太微妙,但一旦加深又顯得太刺眼時,保持柔和的顏色並改用 2px。增加重量來修復低對比度;降低對比度來修復過多的重量。

視覺層次 ≠ 文件層次。 語義標記和視覺重量是兩個獨立的決定。章節標題通常是標籤,而不是標題 — 一個 16px 的 h1 是可以的,有時標題應該完全在視覺上隱藏,因為內容本身已經說明了一切。


硬性規則

偏離這些規則會產生特定、可識別的失敗。

  1. 永遠不要在彩色背景上使用灰色文字。 灰底白字有效是因為它降低了對比度;彩色背景上的灰色看起來只是髒髒的。降低不透明度的白色看起來褪色且像被禁用,並且會讓圖案透過字元顯示出來。應手動挑選一種帶有背景色調的顏色,調整飽和度和明度。
  2. 永遠不要將 em 用於字型比例。 使用 px 或 rem。
  3. 永遠不要在執行時期產生色調。 事先定義它們。
  4. 永遠不要對不該縮放的東西使用百分比寬度。 側邊欄使用固定寬度;主要區域進行彈性伸縮。元素應設定 max-width,並且僅在螢幕實際較小時縮小 — 一個登入卡片不應該在中型螢幕上比在大螢幕上更寬。
  5. 永遠不要在斷點處按比例縮放東西。 大的元素必須比小的元素縮小得更快。在 14px 的行動版內文上,一個 2.5em 的標題會計算出 35px — 太大;它在行動版上應該要 20–24px。同樣地,按鈕的內邊距應隨著按鈕縮小而按比例變緊,而不是與其字型大小一起縮放。
  6. 始終保持群組外部的空間大於群組內部的空間。 這可以修復「哪個標籤屬於哪個欄位」、擁擠的項目符號列表,以及看起來連接到錯誤段落的標題。模糊的間距是一個功能性的錯誤,而不僅僅是美觀問題。
  7. 永遠不要只使用顏色作為唯一信號。 添加圖示、形狀或文字提示。對於圖表,透過對比度(一種顏色的淺→深色調)來區分系列,而不是透過色相 — 色盲使用者可以可靠地讀取明度,但色相則不然。
  8. 最低對比度要求: 普通文字為 4.5:1。3:1 的寬限僅適用於大文字,WCAG 將其定義為 24px 常規字重或 18.66px 粗體 — 而不是 18px。除非文字真的那麼大,否則預設使用 4.5:1。當白字在彩色背景上失敗時,反過來做:在淺色色調上使用深色文字(參見 references/systems.md)。另外,3:1 也適用於非文字(WCAG 1.4.11):如果邊框是識別控制項的唯一方式 — 例如輸入框的輪廓、核取方塊的邊緣 — 則它與其背景之間需要 3:1 的對比度。僅用於分隔內容的細線則不需要。這是兩個不同的標記,而不是同一個。
  9. 永遠不要將圖示縮放至遠離其預期尺寸。 一個 16–24px 的圖示在 48px 時看起來笨重且缺乏細節。應將其改為放置在一個彩色圓圈內。

參考資料

assets/tokens.css — 一個完整、經過對比度驗證的起始集,包含上述所有內容作為 CSS 自訂屬性:間距、字型、粗細、邊框寬度、固定不透明度比例、9 階冷灰色漸層、9 階主色、三個強調色三元組、五個層級、一個語義角色層(--surface、--text-primary、--action…)和一個深色模式區塊,該區塊僅覆蓋這些角色。將其複製進來,並調整色相,而不是從這些文字中重新推導比例。在元件中參考角色,而不是原始漸層 — 這是讓深色模式運作的關鍵。每個文字/表面組合在兩種模式下都已驗證 ≥4.5:1,每個功能性邊框 ≥3:1;故意低於閾值的色調(禁用狀態、裝飾性分隔線、僅限大文字的色階)根據標準被豁免,並在行內註解中標明。

當工作需要時載入這些檔案:

  • references/systems.md — 從零開始建立調色盤:選擇基礎色、在淺色和深色端保持飽和度、色相偏移、暖/冷灰色,以及達到對比度比率而不使用難看顏色的兩種逃脫方法。
  • references/diagnose.md — 症狀 → 修復對照表。每當任務是改進現有的 UI 而不是建構新的 UI 時,首先載入這個。
  • references/techniques.md — 深度和光線模擬、雙層陰影、基準線對齊、字距調整、跳出預設元件形狀,以及處理使用者上傳的圖片。

相關技能