关于 sgds-theming
sgds-theming 是一份使用 SGDS CSS token 覆盖定制产品主题的技能指南,面向 SGDS 产品开发者。它说明如何调整品牌色、昼夜模式、字体、圆角和间距密度。
主要功能
- 01覆盖产品品牌色 token
- 02配置 GovTech 预设色板
- 03启用昼间与夜间主题
- 04调整字体及字体角色
- 05设置语义圆角 token
- 06选择紧凑或宽松间距密度
适用场景
- 01为产品套用自定义品牌色
- 02为 GovTech 产品映射指定色板
- 03按需启用夜间模式
- 04调整字体、圆角或界面间距
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ govtechsg/ sgds-web-component --skill sgds-theming安装后在 Claude Code 中输入/sgds-theming确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
reference/border-radius.mdbrand-colour.mddensity.mdtypography.md详细介绍
SGDS 主题技能
使用 SGDS CSS 令牌覆盖来自定义产品主题——品牌颜色、日间/夜间模式、字体、边框半径和间距密度。
前置条件
在自定义 CSS 之前导入 themes/day.css。完整的导入顺序请参阅 sgds-getting-started。
快速决策指南
| 想要更改的内容 | 令牌/机制 | 参考 |
|---|---|---|
| 产品品牌颜色(自定义) | 覆盖 --sgds-product-primary-{100–900} | brand-colour.md |
| 产品品牌颜色(GovTech) | 导入一个 themes/gt/<colour>.css,并映射到 --sgds-product-primary-* | brand-colour.md |
| 启用暗色/夜间模式 | 导入 themes/night.css,并将 .sgds-night-theme 添加到 <html> | 见下文 |
| 字体字族(所有角色) | 覆盖 --sgds-font-family-brand | typography.md |
| 字体字族(按角色) | 覆盖各个 --sgds-font-family-{display,heading,subtitle,body,label,code} | typography.md |
| 边框半径 | 覆盖语义 --sgds-{purpose}-border-radius 令牌 | border-radius.md |
| 间距密度(紧凑/宽松) | 导入 themes/density/compact.css 或 spacious.css | density.md |
更改产品品牌颜色
默认产品颜色为紫色(--sgds-product-primary-*)。使用品牌颜色覆盖完整的 100–900 色阶,即可一次性为所有主要 UI 元素更换主题。
创建自定义 CSS 文件,并在 :root 中覆盖原始令牌:
/* yourCustomCss.css */
:root {
--sgds-product-primary-100: #F5B6DA;
--sgds-product-primary-200: #F186C0;
--sgds-product-primary-300: #EE4FA6;
--sgds-product-primary-400: #EE0290;
--sgds-product-primary-500: #EF0078;
--sgds-product-primary-600: #DD0074;
--sgds-product-primary-700: #C6006E;
--sgds-product-primary-800: #B0006A;
--sgds-product-primary-900: #880061;
}
在 SGDS 主题文件之后导入自定义 CSS,使覆盖生效:
import "@govtechsg/sgds-web-component/themes/day.css";
import "./yourCustomCss.css";
@import "@govtechsg/sgds-web-component/themes/day.css";
@import "./yourCustomCss.css";
语义令牌(--sgds-primary-*)引用原始色阶,因此更改原始值会自动传递到所有使用主色的组件。
GovTech 品牌颜色
GovTech 产品应使用 themes/gt/ 中预先批准的调色板之一,而不是自行定义十六进制颜色值。每个产品必须恰好选择一种颜色,不允许混用多个 GT 调色板。
可用颜色
| 文件 | 颜色 |
|---|---|
themes/gt/blue.css | 蓝色 |
themes/gt/cyan.css | 青色 |
themes/gt/magenta.css | 洋红色 |
themes/gt/pink.css | 粉色 |
themes/gt/purple.css | 紫色 |
themes/gt/red.css | 红色 |
应用方法
每个 GT 文件都会在 :root 中定义 --gt-color-100 至 --gt-color-900。在自定义 CSS 文件中,将这些值映射到 SGDS 产品主色阶:
/* yourCustomCss.css */
:root {
--sgds-product-primary-100: var(--gt-color-100);
--sgds-product-primary-200: var(--gt-color-200);
--sgds-product-primary-300: var(--gt-color-300);
--sgds-product-primary-400: var(--gt-color-400);
--sgds-product-primary-500: var(--gt-color-500);
--sgds-product-primary-600: var(--gt-color-600);
--sgds-product-primary-700: var(--gt-color-700);
--sgds-product-primary-800: var(--gt-color-800);
--sgds-product-primary-900: var(--gt-color-900);
}
导入顺序——GT 文件必须位于自定义 CSS 之前,这样执行映射时才能定义 --gt-color-* 变量:
import "@govtechsg/sgds-web-component/themes/day.css";
import "@govtechsg/sgds-web-component/themes/gt/blue.css"; // pick one colour only
import "./yourCustomCss.css";
@import "@govtechsg/sgds-web-component/themes/day.css";
@import "@govtechsg/sgds-web-component/themes/gt/blue.css"; /* pick one colour only */
@import "./yourCustomCss.css";
同样会自动传递:更改 --sgds-product-primary-* 会自动更新所有使用主色的组件。
日间模式(默认)
日间模式为默认模式。只需导入 themes/day.css,无需额外配置。
@import "@govtechsg/sgds-web-component/themes/day.css";
夜间模式(可选)
夜间模式需要主动启用。将 sgds-night-theme 类添加到 <html> 元素,即可激活 themes/night.css 中定义的 :root.sgds-night-theme 选择器。
设置
导入两个主题文件:
import "@govtechsg/sgds-web-component/themes/day.css";
import "@govtechsg/sgds-web-component/themes/night.css";
@import "@govtechsg/sgds-web-component/themes/day.css";
@import "@govtechsg/sgds-web-component/themes/night.css";
启用夜间模式
将该类添加到 <html> 元素,即可将所有令牌切换为对应的暗色版本:
<html class="sgds-night-theme">
通过 JavaScript 在运行时切换:
document.documentElement.classList.toggle("sgds-night-theme");
工作原理
themes/night.css 会在 :root.sgds-night-theme 作用域下重新定义与 themes/day.css 相同的语义令牌。所有 SGDS 组件都读取相同的语义令牌,因此切换该类即可切换整个 UI,无需更改任何组件标记。
更改字体
SGDS 默认通过 --sgds-font-family-brand 使用 Inter。覆盖此令牌即可使用其他字体:
:root {
--sgds-font-family-brand: "Your Font", system-ui, sans-serif;
}
字体资源需由你负责加载,可以使用 <link> 标签或 @font-face。SGDS 不会自动加载自定义字体。如果要继续使用默认字体,请参阅 sgds-getting-started,获取经过优化的 Inter Google Fonts URL。
更改边框圆角
完整参考请参阅 border-radius.md,其中包含语义令牌表、覆盖示例和可用的基础值。
更改间距密度
完整参考请参阅 density.md,其中包含密度模式、令牌表、受影响的组件和导入顺序。
面向 AI Agent
- 始终告知用户,应在
themes/day.css之后导入自定义 CSS,否则覆盖设置会被覆盖。 - 品牌颜色覆盖的目标是基础令牌(
--sgds-product-primary-{100–900}),而不是语义令牌。更改基础令牌才是正确做法;不要直接覆盖单个语义令牌。 - 夜间模式需要同时导入
themes/night.css,并在<html>上添加sgds-night-theme类。仅执行其中一项是不够的。 - 夜间模式是可选的——仅当用户明确需要深色模式支持时,才添加
themes/night.css。 - 默认始终启用日间模式;无需添加
sgds-day-theme类。 - 覆盖
--sgds-font-family-brand时,提醒用户也要自行加载字体文件。 - 自定义覆盖会同时应用于日间和夜间模式,因为它们以
:root为目标,而两个主题选择器都继承自它。 - 如需设置品牌颜色主题,请阅读 brand-colour.md。
- 如需设置排版/字体主题,请阅读 typography.md。
- 如需设置边框圆角主题,请阅读 border-radius.md。覆盖语义令牌(
--sgds-{purpose}-border-radius),并通过var(--sgds-border-radius-{size})引用基础值。 - 如需设置密度主题,请阅读 density.md。在颜色主题之后导入一个密度文件(
compact.css或spacious.css)。密度仅影响内边距和间距,不影响字号、颜色或边框圆角。