跳到主要内容
ZeroWorks

外观与主题定制

理解主题层级与六色体系,配置工作区主题、覆盖文件与风景模式,并为来源和状态定制图标。

主题层级

主题由四层组成,越靠前的层级优先级越高。没有单独设置主题的工作区,会沿用应用默认主题。

层级位置作用
工作区主题设置 → 外观 → 工作区主题为单个工作区指定主题,覆盖应用默认
应用默认主题设置 → 外观 → 默认主题所有工作区的默认外观
覆盖文件~/.zero-works/theme.json只改写指定的具体颜色
预设主题~/.zero-works/themes/{name}.json包含完整配色与元信息的主题包

工作区主题

每个工作区可以使用与全局不同的主题,方便用颜色区分不同的项目或场景。工作区主题的选择保存在该工作区自己的配置里。

  1. 打开设置 → 外观,在默认主题一栏设定全局外观。
  2. 在工作区主题一栏,为每个工作区选择沿用默认或某个具体预设。
  3. 切换工作区,确认配色已经跟着变化。
试一试

{ "id": "ws_abc123", "name": "我的项目", "defaults": { "colorTheme": "nord" } }

六色语义体系

工作台的整体视觉由六个语义色控制。所有组件、状态提示和图标都从这六个颜色取值,因此只改其中一个,界面的整体观感就会跟着变化。

颜色用途使用场景
background页面与面板底色浅色或深色模式下的表面颜色
foreground文字与图标主要文字颜色
accent品牌色、执行模式高亮、激活状态
info警告、编辑前确认模式提示色、需要留意的地方
success已连接状态成功提示、正常状态
destructive错误与删除操作告警、失败状态

主题覆盖文件

只想改一两个颜色时,不必准备完整主题。创建覆盖文件并写入要改的颜色即可,其余部分继续沿用当前主题。

试一试

{ "accent": "oklch(0.58 0.22 293)", "dark": { "accent": "oklch(0.65 0.22 293)" } }

深色模式

dark 对象为深色模式提供可选覆盖。系统切换到深色模式时,顶层颜色作为默认值,dark 中定义的颜色会覆盖它们。

这意味着可以只针对深色模式调整个别颜色,不必复制整套配色。

  • 顶层颜色先作为默认值生效。
  • dark 里写过的颜色在深色模式下替换对应顶层颜色。
  • 没有写进 dark 的颜色在两种模式下保持一致。

预设主题

预设主题是放在配置目录 themes 目录下的完整主题包,每个文件包含配色与元信息。安装方式是把主题文件放进去,再在设置里选中它。

字段说明
name主题显示名称
description一句话说明
author主题作者
license授权类型
source主题原始出处地址
supportedModes支持的模式,可写 light、dark 或两者
shikiTheme代码高亮主题的浅色与深色变体
试一试

{ "name": "深色示例", "description": "一套深色配色", "supportedModes": ["dark"], "background": "oklch(0.22 0.02 280)", "foreground": "oklch(0.95 0.01 270)", "accent": "oklch(0.70 0.20 320)", "info": "oklch(0.78 0.14 70)", "success": "oklch(0.72 0.18 145)", "destructive": "oklch(0.65 0.22 28)", "shikiTheme": { "light": "github-light", "dark": "dracula" } }

风景模式

风景模式会用整窗背景图配合半透明面板,营造更有氛围感的界面。开启方式是在主题里把 mode 设为 scenic,并指定背景图片。

属性或表面颜色说明
mode设为 scenic,默认是 solid
backgroundImage背景图片文件名,相对于主题文件,或一个可访问的地址
paper表面颜色:对话消息、卡片等抬升的内容
navigator表面颜色:左侧导航栏背景
input表面颜色:输入框背景
popover表面颜色:下拉、弹窗、右键菜单
popoverSolid表面颜色:保证完全不透明的弹窗背景
试一试

{ "mode": "scenic", "backgroundImage": "mountains.jpg", "background": "oklch(0.15 0.02 270 / 0.8)", "paper": "oklch(0.18 0.02 270 / 0.6)", "navigator": "oklch(0.12 0.02 270 / 0.7)" }

颜色格式

任何合法的 CSS 颜色写法都可以使用。推荐 OKLCH,因为它在不同模式下的表现更稳定。

格式示例
十六进制#8b5cf6,或带透明度的 #8b5cf6cc
RGBrgb(139, 92, 246),或 rgba(139, 92, 246, 0.8)
HSLhsl(262, 83%, 58%)
OKLCHoklch(0.58 0.22 293)
具名色purple、rebeccapurple

OKLCH 参考

OKLCH 的写法是 oklch(明度 彩度 色相),用感知均匀的方式描述颜色,因此更贴近人眼对深浅的感受。

  • 红色约 25,橙色约 70,黄色约 100。
  • 绿色约 145,青色约 195,蓝色约 250。
  • 紫色约 293,粉色约 330。
分量取值范围含义
明度0 到 10 是黑色,1 是白色
彩度0 到 0.40 是灰色,越大越饱和
色相0 到 360色轮上的角度

示例

下面三个例子分别对应最小改动、替换品牌色和提高对比度三种常见需求。

试一试

最小改动:{ "accent": "#3b82f6" } 品牌色:{ "accent": "oklch(0.55 0.25 250)", "info": "oklch(0.70 0.15 200)", "dark": { "accent": "oklch(0.65 0.25 250)", "info": "oklch(0.75 0.12 200)" } } 高对比度:{ "background": "#ffffff", "foreground": "#000000", "dark": { "background": "#000000", "foreground": "#ffffff" } }

实时更新

主题改动会立即生效,不需要重启应用。编辑覆盖文件后,界面会自动刷新。

在设置里切换预设主题同样是即时的,不需要重新打开工作区。

图标定制

来源、技能和状态都可以配置图标。图标可以直接写成一个表情符号,也可以指向一个图片文件。

  1. 在实体的配置文件里写入 icon 字段,可以是表情符号,也可以是相对路径。
  2. 或者把图标文件放在实体目录中,命名为 icon.svg、icon.png 或 icon.jpg,工作台会自动发现。
  3. 需要固定指向某个文件时,用相对路径明确指定。
  • 多个格式同时存在时,优先顺序是 SVG、PNG、JPG。
  • 来源还可以填一个图片地址,工作台会把它下载成本地图标文件后使用。
  • 使用 currentColor 的 SVG 会跟随当前主题变色,没有使用它的 SVG 保持自身配色。
格式扩展名适合
SVG.svg可缩放,可用 currentColor 跟随主题
PNG.png带透明通道的位图
JPG.jpg、.jpeg照片或复杂插画
表情符号Unicode不需要文件,快速区分来源
试一试

{ "icon": "🔧" } { "icon": "./my-custom-icon.svg" }

状态图标

状态图标与普通实体图标略有不同:文件名使用状态 ID,而不是 icon.svg。状态本身还可以指定颜色,颜色会用于图标和列表中的视觉标记。

  • 把图标文件命名为状态 ID,例如 in-progress.svg,即可在对应状态目录下被发现。
  • 系统颜色名区分大小写,写成 accent 而不是 Accent 才会生效。
  • 透明度取值范围是 0 到 100,例如 foreground/50,而不是 foreground/0.5。
  • 自定义颜色需要至少提供 light 一个值。
状态默认颜色外观
backlogforeground/50中性
todoforeground/50中性
needs-reviewinfo琥珀色
doneaccent品牌色
cancelledforeground/50中性
试一试

{ "id": "in-progress", "label": "进行中", "color": "success", "category": "open" }

排障

  • 主题不生效:确认 JSON 语法正确,文件放在配置目录下的 theme.json,预设主题放在 themes 目录中,颜色值是合法的 CSS 颜色。
  • 深色模式下颜色不对:补上 dark 覆盖,并检查预设主题的 supportedModes 是否包含当前模式。
  • 背景图不显示:确认 mode 设为 scenic,图片路径相对于主题文件且文件存在可读。
  • 图标不显示:确认文件放在实体对应的目录里,文件名符合约定,SVG 内容是合法 XML。
  • 颜色改了但界面没变:检查是否被更高层级的工作区主题覆盖。