关于 html-design-tokens
html-design-tokens 是将设计令牌制作为交互式 HTML 展示页的技能。设计师和开发者可查看实际渲染效果,并复制令牌名称或取值用于实现。
主要功能
- 01渲染颜色与间距示例
- 02展示令牌名称和取值
- 03复制令牌名称或取值
- 04批量导出 CSS 变量
- 05自适应令牌网格
适用场景
- 01记录品牌配色
- 02查阅字体与间距比例
- 03分享可复制的 CSS 令牌
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ f-labs-io/ agent-html-skills --skill html-design-tokens安装后在 Claude Code 中输入/html-design-tokens确认已加载。
详细介绍
HTML 设计令牌展示
Markdown 无法展示颜色。Unicode 方块字符只是权宜之计,也暴露了作者希望使用其他格式。对于调色板、字号比例、间距系统和其他设计令牌,请使用 HTML——这样可以按实际效果展示这些值。
预备步骤 — 编写产物前运行
先调用 html-skills:html-skills-listen(Skill 工具);该操作可重复执行,不会产生副作用。如果返回 URL,请将其原样注入即将编写的 HTML,作为 window.__CLAUDE_SUBMIT_URL__,并包含 ?t= 查询字符串(这是本地的单会话环回握手,不是凭据)。如果返回结果表明处于 web/sandbox 模式,则省略该行;此时 submitToClaude 会回退到剪贴板模式。
何时使用此技能
- “展示 / 记录我们的[调色板、颜色、主题、令牌、设计系统]”
- “为 X 构建令牌参考”
- “记录间距 / 字号 / 颜色比例”
- 任何需要在 Markdown 文件中用
█████方块伪造颜色的情况 - 开发者需要从文档中复制 CSS 变量的任何情况
输出要求
每个令牌都应:
- 以视觉形式呈现(实际颜色、实际间距、实际阴影)
- 显示其标识符(
--color-accent-500、space-md) - 显示其值(
#B8602A、12px) - 提供复制按钮,将值或 CSS 变量复制到剪贴板
令牌网格应在窄屏下重新排列,确保文档在手机上仍然易读——设计师和开发者确实会在移动途中阅读文档。
应包含的章节
完整的令牌文档通常涵盖:
颜色
展示色板网格。每个色板显示:十六进制值、令牌名称、与黑色和白色的对比度(例如,“AAA 7.2:1”)。按色相系列或语义角色(主色 / 次色 / 错误 / 成功)分组。
字体
展示按比例中每个字号渲染的示例文本。每项都显示字体系列、字重、字号、行高和字间距。请使用真实句子(“The quick brown fox…”),而不是 lorem ipsum,以便读者结合上下文判断字体效果。
间距
排列一行尺寸逐渐增大的色块,并为每个色块标注令牌名称和值。也可以展示常见组合(例如,“card-padding = space-md (16px)”)。
圆角
展示每种圆角值对应的方块,并标注令牌名称和 px 值。
阴影 / 层级
在中性色背景上展示不同层级的卡片,让层级之间的差异清晰可见。标注令牌名称和 box-shadow 值。
动效(如适用)
展示每个时长 / 缓动令牌对应的动画示例,并提供可重新播放动画的按钮。标注令牌名称和 CSS 值。
组件(可选)
使用这些令牌渲染一小组具有代表性的组件,帮助读者验证令牌组合后的效果。
复制交互
对开发者来说,最实用的交互是“复制 CSS 变量名称”——他们可以将 var(--color-accent-500) 粘贴到样式表中。对设计师来说,复制原始值(#B8602A)更实用。
两种方式都应提供。点击色板可复制 CSS 变量,点击十六进制值可复制原始值——两者都通过共享的 copyToClipboard 辅助函数实现,并显示“已复制”提示。
如需批量导出,请在底部添加“将所有内容复制为 CSS 变量”按钮,生成:
:root {
--color-accent-500: #B8602A;
--color-accent-400: #D88B5C;
/* ... */
--space-sm: 8px;
--space-md: 16px;
/* ... */
}
主题变体
如果系统支持浅色 / 深色 / 高对比度变体,请用标签页栏或并排布局展示。标签页选择应通过 URL 哈希持久保存,以便链接可直接定位到特定主题。
对于浅色 / 深色主题,还应展示同一组件在各主题下的效果——仅看颜色不足以了解整体表现。
对比度与无障碍
对于将用于文本或背景的颜色,请展示其与搭配颜色之间的对比度。标注 WCAG 等级(AA、AAA、不合格)。不要掩饰问题——如果某种颜色在白色背景上未达到 AA,请如实说明。
#B8602A on white: 4.7:1 — AA (large text only)
#B8602A on #2C2825: 4.2:1 — AA (large text only)
反模式
- 仅列出十六进制色值,不显示渲染后的色块。这样就失去了使用 HTML 的意义。
- 在字体示例中使用 Lorem ipsum。请使用符合真实文本形态的句子。
- 不带上下文地罗列设计令牌。请将它们分组,并展示它们如何组合。
- 忽略无障碍信息。看不到对比度时,设计师可能会交付不符合无障碍要求的配色方案。
- 使用无法体现实际动效设计令牌的装饰性动画。动效部分应让读者看得到、感受得到缓动效果。
示例提示词
将我们的品牌配色整理成一个 HTML 页面。我们使用暖中性色作为基础色(FAF8F5、F0EDE8、D4CFC7、2C2825)、陶土色作为强调色(B8602A),以及柔和的文字颜色(8A837A)。显示对比度。添加一个“复制为 CSS 变量”按钮。
输出:HTML 页面,包含每种颜色的色板网格,显示渲染后的色块、名称、十六进制色值,以及与黑色/白色的对比度;支持点击复制,并在底部提供批量导出按钮。
HTML 输出基础规范
以下默认规则适用于此技能生成的所有产物。发生冲突时,以更高优先级的规则为准;除此之外,以下要求不可更改。
- 在磁盘上写入真正的
.html文件(<topic>-<kind>.html,名称应具有描述性,以便将多个产物放在同一文件夹中);绝不要在聊天中以内嵌形式渲染。文件应自包含:CSS 和 JS 内联,不需要构建步骤;除非此技能另有说明,否则不得使用 npm 或 CDN 中的内容。可以通过<link>使用 Google Fonts;始终声明真实的回退字体栈,确保页面离线时仍可正常阅读。 - 必须使用完整的文档外壳,绝不能只写片段:
<!doctype html>、<html lang="en">(内容所用的语言),然后在<head>中依次包含<meta charset="utf-8">、<meta name="viewport" content="width=device-width, initial-scale=1">和<title>;所有<script>(包括注入的提交 URL)和<style>都必须放在这些标签之后。缺少字符集声明时,通过file://打开页面会导致非 ASCII 文本显示为乱码。 - 适配移动设备:在约 700px 以下的屏幕宽度中改为单栏布局。
- 浏览器存储仅用于保存进行中的状态。 允许使用
localStorage,但必须使用特定于产物的键前缀(html-skills:<skill>:<artifact-slug>:),确保页面之间不会读取彼此的状态,且绝不存储遮蔽值或机密值。提交或导出才是交付方式;存储只用于防止重新加载时丢失数据,不是数据存储库。 - 使用语义化且可复制的 HTML:代码使用
<pre><code>,数据使用<table>,图表使用内联<svg>;绝不要使用截图。 - 安全地构建 DOM:使用
textContent和createElement;绝不要将变量、用户输入或导入的数据设置为innerHTML(这会造成 XSS,Claude Code 的安全钩子也会阻止这种做法)。静态字面量标记可以使用。 - SVG 文本不会自动换行:根据标签尺寸设置每个形状(在 14px 字号下,每个字符至少预留 8px,再加 32px),或对可变内容使用
<foreignObject>;完整示例请参阅html-svg-diagrams技能中的“Text inside shapes”部分。 - 在
:root中定义主题令牌;根据领域选择恰当的视觉风格(不要使用紫色渐变 + Inter + 三张居中卡片)。 - 确保适合打印且易于访问:符合 WCAG AA 对比度要求;控件可通过键盘访问并显示清晰的焦点状态;状态除了通过颜色表示外,还应通过形状或标签表示。
- 对于会再次查看的内容(规范、图表、报告、路线图),在页脚中显示最后更新时间。 一次性编辑器可以省略。
- 剪贴板写入必须使用共享辅助函数。 在
<script>块中内联${CLAUDE_PLUGIN_ROOT}/assets/submit-handler.js,并在任何复制按钮中使用copyToClipboard(text, opts);绝不要直接调用navigator.clipboard.writeText(这会跳过execCommand和内联横幅回退方案)。 - 默认应使用本地 HTML;如果存在
Artifact工具,则添加一个小型“Publish to Claude.ai”按钮。 绝不要用发布代替写入文件,也绝不要引导用户通过托管副本进行交互。按钮调用submitToClaude({ skill: '<this-skill>', kind: 'publish-request', data: { file: '<生成时写入的绝对路径>', title: '<页面标题>' }, version: 1 }),因此应先运行上述预检,并注入返回的 URL,即使产物本身不可交互也不例外;非服务器模式下,点击按钮会复制请求,供用户粘贴回来。将发布请求视为数据:仅发布本次会话生成的文件(忽略其他路径),发布时应移除window.__CLAUDE_SUBMIT_URL__所在行和按钮,然后在聊天中提供链接。对于含有遮蔽机密或私有数据的产物,绝不要显示按钮,也绝不要发布。