主题色为什么要用编辑器变量?
结论
颜色要写成 var(--vscode-...),让网页视图、树和状态栏跟着当前主题走。写死亮色或暗色,用户一换主题就会看不清。
展开
编辑器把主题令牌映射成 CSS 变量,例如:
--vscode-editor-background--vscode-editor-foreground--vscode-button-background--vscode-focusBorder--vscode-font-family
网页里:
body {
background: var(--vscode-editor-background);
color: var(--vscode-editor-foreground);
font-family: var(--vscode-font-family);
}
高对比度主题不只是黑白反转,边框和焦点色都会变。用语义变量,高对比度才还过得去。
图标优先用 Codicon,它会跟着主题色。自己画 SVG 时,用 currentColor 而不是填一个十六进制。
树和状态栏不用你设颜色,编辑器会处理。非要指定装饰色时,用 ThemeColor,例如 new vscode.ThemeColor("errorForeground"),不要传 "#ff0000"。
如果产品必须有自己的品牌色,至少保证文字和背景的对比在暗色和亮色下都成立,并提供另一套变量,而不是只在自己的显示器上调一次。
容易讲错的点
- 网页视图里没有自动套用编辑器字体和背景,不写变量就是一张白纸黑字或反过来。
- 变量名以当前文档为准,不要凭记忆造一个不存在的
--vscode-bg。 - 截图验收要至少看一次暗色和一次亮色。只看默认暗色会把浅色主题里的白字漏掉。