Communitygithub.com

sayuriovo/terrain-ui

以遊戲選單風格為靈感的安靜工業風 Web UI 建構工具(紙墨色調、單一強調色、一目了然的選取狀態、圓形次要按鈕、`//` 路徑標題、淡色封閉輪廓線)。當需要以此風格或「工業風」、「終端風」、「終末地風格」建立頁面、作品集、儀表板或元件時使用。

terrain-ui 是什麼?

Terrain UI 是一套從工業主題遊戲介面提煉而來的 CSS 元件與設計規則,不包含任何遊戲素材。它定義了八條核心規則,例如:單一強調色同時表示「當前位置」與「主要動作」;按方向區分的選取樣式(垂直列表與水平頁籤);按鈕形狀決定優先級(主要按鈕為切角方塊,次要為圓形藥丸);左上角固定顯示 `//` 路徑標題;使用真實數字作為裝飾;顯示快捷鍵提示;背景使用淡色封閉輪廓線;以及短促堅定的動畫曲線。支援三種頁面類型:閱讀(文章)、展示(首頁)、工作台(儀表板),各有不同的大膽程度。所有元件以 `tu-` 前綴的 CSS 類別提供,涵蓋按鈕、列表、頁籤、表格、輸入框、對話框、提示等,並附有完整的 Markdown 說明文件、CSS 與 JavaScript 資源檔。適用於 Claude Code、Cursor、Codex 等 AI 代理工具,可直接根據需求產生符合此風格的頁面或元件。

相容平台~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/sayuriovo/terrain-ui/tree/HEAD

在你喜歡的 AI 中提問

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

說明文件

Terrain UI

這些規則是從一款工業主題遊戲的介面中提煉出來的,只保留了對一般網頁有用的部分。此技能不包含任何遊戲素材,也無意重現該遊戲。

開始前請先閱讀整份文件。開啟 assets/terrain.css 以取得色彩與元件標記,使用 assets/contours.js 來產生輪廓線背景,並參閱 references/research.md 以了解每條規則的來源以及為何省略某些項目。

八條規則

  1. 單一強調色,兩種意義:當前位置與主要動作。預設為 #FEEC00,取自遊戲中選取的頁籤。僅作為填色使用,上方為墨水色文字;在淺色主題中,絕不以強調色作為線條或文字。懸停狀態也同理:只有主要按鈕會在懸停時以強調色填滿。連結、藥丸按鈕和列表行僅會變亮或加粗底線。
  2. 選取取決於方向:
    • 垂直列表:懸停時變亮該行;選取的行變暗、文字變亮,並在左側出現一條強調色條。
    • 水平頁籤:選取的頁籤以強調色填滿。切換時,舊區塊收合,新區塊從其中心橫向展開。
  3. 按鈕形狀顯示優先級:主要動作為右下角切角的方塊;次要動作為右端帶有圓形圖示的藥丸。每個按鈕組最多一個主要動作。
  4. 每頁左上角放置路徑:// 作品 / 關於我。可返回的層級應為連結。
  5. 數字即裝飾,且必須真實:使用寬形表格數字設定 ID、日期和 目前 / 總數 計數器。絕不發明資料或加入偽造的技術文字。同樣適用於文案:僅根據使用者提供的內容或專案文件描述產品(功能、支援範圍、安裝方式),並保持其範圍。若無來源,應填入 [TODO: ...] 這類佔位符,而非自行填寫。
  6. 顯示快捷鍵提示:例如在頁面按鈕旁顯示 ← →。僅在具備精細指標的裝置上顯示。
  7. 背景:封閉輪廓線:在兩個角落各有一塊,透明度 6% 至 9%,每第五條線加粗,無動畫。
  8. 短促、果斷的動畫:懸停 90 毫秒,選取 110 至 120 毫秒,曲線為 cubic-bezier(.2,0,0,1)。當系統要求減少動畫時,關閉所有動畫。

先選擇頁面類型

在開始之前先決定要建立哪一種頁面。三種頁面共享相同的色彩與元件,差異僅在於大膽程度。若不確定,請選擇「閱讀」。

類型用途方法遊戲中的等效頁面
閱讀文章、專案細節、設定、說明一個文字欄,寬度約 65 個拉丁字符或 38 個 CJK 字符;強調色僅用於目前導航項目和主要按鈕;輪廓線可選百科全書、檔案庫
展示首頁、作品集、登陸頁面大型寬標題,可使用輪廓字型;大型數字作為背景;開啟輪廓線;內容可逐區塊淡入主選單、商店
工作台管理頁面、儀表板、工具、擴充功能設定左側為垂直列表導航,頂部為頁籤;主要包含表格、數字和表單;無大型標題;僅在回應操作時才有動畫庫存、裝備、好友列表

元件

所有元件均位於 assets/terrain.css 中,並以 tu- 前綴命名。examples/demo.html 展示了每個元件。

元件類別備註
路徑標題tu-crumb規則 4
垂直列表tu-list使用 aria-current 標記目前項目
水平頁籤tu-tabs tu-tab使用 aria-selected="true" 或 aria-current 標記目前頁籤
主要 / 次要按鈕tu-btn / tu-btn--pill + tu-btn__icon規則 3
快捷鍵提示tu-kbd規則 6
欄位行tu-fields tu-sep使用垂直線 │ 分隔中繼資料
面板tu-panel扁平區塊:無圓角、陰影或邊框
表格tu-table-wrap tu-table小型寬標籤標題;數字欄位使用 tu-right 右對齊;窄螢幕時橫向捲動
輸入框tu-field tu-input tu-hint聚焦時底線加粗,左側出現強調色條
錯誤訊息tu-error,並在輸入框加上 aria-invalid="true"一個小強調色方塊加上一句解決方法說明;無紅色文字
開關tu-switch「開啟」為目前狀態,因此軌道以強調色填滿
對話框<dialog class="tu-dialog">按鈕置於底部列:一個主要按鈕,取消為藥丸;從模糊狀態銳化出現
通知tu-toast帶有左側強調色條的深色條;從左側滑入,2 秒後消失
空狀態tu-empty一個虛線框,內含一句說明此處將顯示什麼的句子,可選一個主要按鈕
載入tu-progress,等待時加上 tu-progress--busy一條 2 像素的線;若已知進度,設定 --tu-value 並顯示百分比

無紅色。警告、失敗和待處理狀態使用小強調色方塊搭配墨水色文字。將刪除等不可逆操作置於確認對話框之後。

對於表中未列出的項目,請根據八條規則推導:是否為「目前」或「主要」決定能否使用強調色;主要或次要決定方塊或藥丸;可否點擊決定懸停時是否變亮。

動畫

動作持續時間方法
懸停變亮90 毫秒背景色轉場
列表選取條落下110 毫秒scaleY(0 → 1)
頁籤切換120 毫秒強調色區塊 scaleX(0 → 1),從中心展開
主要按鈕懸停280 毫秒強調色從左側擦拭進入
頁面切換淡出 320 毫秒,淡入 480 毫秒舊頁面模糊並淡出;新頁面逐區塊淡入,間隔 100 毫秒

避免事項

  • 看不見的標記(紅點、NEW 徽章):在遊戲中它們促使玩家領取獎勵;在作品集或一般網站上則感覺像在催促。
  • 磨砂玻璃、故障撕裂、掃描線、發光、大面積強調色填充、帶陰影的圓角卡片。
  • 僅限遊戲的元素,例如 3D 輪播選單、角色美術和稀有度色條。
  • 任何官方遊戲素材:截圖、標誌、圖示、角色美術、文案或官方字型檔案。

字型

  • 拉丁文字和數字:Saira(開源,SIL OFL 授權)。標籤拉伸至 125%,全部大寫,0.06em 字距。官方網站對其寬標籤未添加字距;此處為小尺寸保留少許字距。
  • 中文:Noto Sans SC 或系統無襯線字型。正文不使用襯線或毛筆字型。
  • 所有數字使用表格數字(font-variant-numeric: tabular-nums)。

交付單一 HTML 檔案

  • 直接使用 terrain.css 的類別,不要新增頁面層級的覆寫來改變其色彩。如果需要變更,表示元件有問題,應回報給此技能。
  • 將 terrain.css 放入 <style> 元素,contours.js 放入 <script> 元素。在內嵌任何腳本之前,確保其中不包含字面上的 </script>;若有,則應寫成 </script>。
  • 若頁面必須離線運作,將 Saira 以 woff2 資料 URI 嵌入 @font-face;否則連結 Google Fonts 並保留後備字型。

交付前檢查清單

  • 已選擇頁面類型,且不同類型的標題大小未混用於同一頁面。
  • 強調色僅出現在當前位置和主要動作上;頁面中無紅色。
  • 每個按鈕組最多一個主要方塊按鈕;其餘為藥丸。
  • 垂直列表和水平頁籤使用各自的選取樣式。
  • 每頁都有 // 路徑標題。
  • 所有數字皆為真實資料;每個產品陳述皆有來源且不誇大其範圍。
  • 已檢查淺色和深色主題;在手機寬度(約 400 像素)下無橫向捲動。
  • 鍵盤焦點可見;啟用減少動畫時一切靜止。
  • 未使用任何官方遊戲素材。

檔案

檔案內容
assets/terrain.css色彩記號(淺色和深色)及所有元件
assets/contours.js輪廓線背景,一行設定即可:TerrainContours.mount(canvas)
examples/demo.html所有元件於同一頁面,可直接開啟
examples/screenshots/元件頁面在淺色、深色、手機寬度及對話框狀態下的截圖
references/research.md研究筆記:觀察到什麼、保留了什麼、遺漏了什麼

相關技能