主題

Lily 元件帶有穩定嘅類別掛鉤同零 CSS — 所以主題只係一份樣式表。呢個教學由「連結一個檔案」去到「讓使用者喺執行時切換主題,並保存落嚟」。

你會建立啲乜

一個整體外觀都可以由使用者更改嘅應用程式 — 由一份連結嘅樣式表開始,以一個持久嘅執行時主題切換器完結 — 大約 15 分鐘。

開始之前

先完成 框架教學 先為你嘅技術棧完成,咁你就有一個細細個嘅 Lily 表單可以加主題。呢度所有內容喺全部七個框架都運作;程式碼範例顯示 Svelte 同純 HTML。

步驟 1 — 連結現成主題

themes/ 目錄附帶 45 份獨立樣式表。將佢哋複製入你應用程式嘅靜態資產,並連結其中一個:

<link rel="stylesheet" href="/assets/themes/united-kingdom-national-health-service-england-for-patients.css" />

呢組主題嘅重點:

  • 公共部門 — NHS England / Scotland / Wales,各有面向病人同面向從業員嘅版本;GOV.UK(united-kingdom-government-digital-service);USWDS(united-states-web-design-system).
  • 受供應商啟發 — adobe-spectrum, mozilla-protocol.
  • 通用 — light, dark, nord, dracula, wireframe, corporate, synthwave,仲有好多其他。

檢查你嘅成果: 重新載入頁面。你喺框架教學入面建立嘅同一個標記而家已經完全有樣式 — 按鈕、輸入欄、標籤、焦點環。一行 HTML 就做到 — 每個元件都保持原狀。

步驟 2 — 覆蓋任何嘢

主題選擇器包喺 :where(...)入面,特異性係零 — 所以你寫嘅任何規則都會勝出,簡單直接:

/* After the theme link: your brand button, everything else themed */
.button {
  background: #7c3aed;
  border-radius: 9999px;
}

步驟 3 — 用 theme-picker 喺執行時切換

theme-picker 輔助工具係一個擁有整個主題生命週期嘅無頭圖示按鈕 + 清單方塊:佢透過替換一個受管理嘅 <link> (永遠只擷取作用中嘅主題)載入所選樣式表,喺文件上設定 data-theme="{slug}" ,並可選擇性咁持久化到 localStorage。呢度顯示 Svelte;React、Vue、Angular、HTML、Nunjucks 同 Blazor 移植版逐個合約同佢對應:

<script>
  import ThemePicker from "@lilydesignsystem/svelte-theme-picker";
</script>

<ThemePicker
  label="Theme"
  themesUrl="/assets/themes/"
  themes={["light", "dark", "nord", "wireframe"]}
  storageKey="my-app-theme"
/>

整個整合就係咁。鍵盤行為跟隨 WAI-ARIA APG 清單方塊模式;控制項本身係無頭嘅(類別掛鉤 .theme-picker),所以佢會採用任何作用中嘅主題。

2026-08-29 已驗證: 呢個準確片段已經對照已發佈嘅 0.1.1 套件編譯,透過 svelte/server.

步驟 4 — 喺你自己嘅 CSS 入面回應主題

因為輔助工具喺文件根部設定 data-theme ,你自己嘅樣式可以根據佢分支:

[data-theme="dark"] .site-logo { filter: invert(1); }

伺服器渲染備註

輔助工具喺框架嘅 mount/effect 生命週期內執行所有 DOM 寫入,所以設計上對 SSR 安全。為咗避免首次繪製閃爍,喺伺服器渲染初始主題嘅 <link> 同 data-theme (例如來自 cookie)— Svelte 輔助工具倉庫附帶一個可運行嘅 SvelteKit cookie 範例,而其他目錄為佢哋嘅技術棧記錄同一個模式。

下一步

  • 偏好輔助工具 — 同一個模式適用於語言、文字大細、分享同日期/時間輸入。
  • 貢獻一個主題 — 每個都係針對類別掛鉤嘅一份獨立樣式表;參見 貢獻.

一路上有問題? 幫助頁面 有好多答案 — 如果某個步驟可以更清楚, 話畀我哋知 我哋會好樂意改進教學。