五套候選主題,每一套都渲染同一組元件(頂欄、所有權橫幅、場館卡、 標籤、主要按鈕、清單列、底部導覽)—— 元件不一樣就比不出主題的差別。 挑一套(或指定要改哪裡),我再進 App 實作。
下面的手機畫面是等比例模擬,玻璃效果是真的 backdrop-filter,不是截圖。
半透明白玻璃 + 背景模糊 + 邊緣高光。質感最高,跟參考圖同一個語言。
成本 高 · 效能 要盯 · 需要有背景圖層才成立
放這裡是當對照組 —— 沒有基準就看不出其他四套到底改了什麼。
成本 零 · 已經在跑
大太陽下的戶外球場看得最清楚,也是年長使用者最習慣的樣子。
成本 中 · ⚠️ 翻淺色最容易踩「近黑面板整片消失」
底色取自球場地墊,背景有很淡的場地線。強調色換成排球黃。
成本 低 · 跟現行同為深色,改動最單純
純黑底、白描邊、黃強調。所有次要文字不再降透明度 —— 弱視與大太陽下都讀得到。
成本 低 · ⭐ 上架無障礙審查會加分
照抄顏色是做不出來的;玻璃感來自下面這幾層疊加,少一層就變成「半透明色塊」。
| 層 | 做法 | 少了會怎樣 |
|---|---|---|
| 背景圖層 | 照片或漸層網格。玻璃是「透出後面的東西」,後面沒東西就沒有玻璃。 | 純色底上看起來只是灰掉的卡片 —— 這也是現行深色底不能直接套玻璃的原因。 |
| 底色 | 白色 12–20% 不透明度。會被背後的顏色染,所以同一張卡在畫面不同位置顏色略不同。 | 拉太高變霧面塑膠、太低文字讀不到。 |
| 背景模糊 | blur(20–24px) + saturate(140–150%)。加飽和度是關鍵,不然背景糊掉會發灰。 |
只有半透明沒有模糊 → 背後的字會透出來,整片髒。 |
| 邊緣高光 | 1px 白色描邊約 30%,再加頂緣 inset 高光模擬光線打在玻璃邊。 | 最關鍵的一層。沒有它,玻璃跟半透明方塊看起來一模一樣。 |
| 內容不透明 | 卡片內的照片、頭像維持 100% 不透明,跟玻璃底形成硬邊對比。 | 全部半透明 → 整張卡糊成一團,沒有層次。 |
| 外陰影 | 大半徑、低不透明度深色陰影,把卡片從背景抬起來。 | 卡片會「貼」在背景上,浮不起來。 |
| 單一強調色 | 整個畫面只有一個飽和色(參考圖是綠),其餘全是玻璃。 | 兩個以上飽和色會打架,玻璃的高級感立刻消失。 |
TT(34 個 token、937 處)—— 命名已經是語意化的(primary / surface / onSurface / outline),可以直接主題化。實測把它改成可切換只會造成 122 處編譯錯誤(const 情境),逐一拿掉 const 即可。CG(29 個、869 處)—— 命名是照顏色取的:cream、tan、sage、peach、lav。在「紙本白」主題裡 CG.sage 該是什麼?必須先改成語意命名才有辦法換主題。Color(0x…),散在 71 個檔案 —— 但其中一部分(運動別圖釘色、球場配色、頭像設計)本來就該固定,那是資料不是主題,要逐檔分辨。BackdropFilter 在中低階 Android 上會掉幀。同一畫面的玻璃層數要有上限,長清單裡的卡片不能每張都是玻璃。TT 走 token(配 feature flag)。先出「現行深色 + 你選的那套」兩套,證明引擎會動。CG 改語意命名接進 token(後台/審核台那系列頁)。