公共服务与教育 · 新资源

KERN 设计系统.

使用经验证的字体排印、语义主题、披露组件和可撤销的确认流程,构建原生 KERN 界面。

OpenDesign 指南8 个章节16 条参考条目原始应用指南
01

KERN 设计系统界面预览

编辑备注、取消或确认放弃更改、恢复备注,并切换外观。

备注、披露面板与安全确认打开完整示例
原生 @kern-ux/native 2.8.2 CSS 与 Fira Sans;交互行为为原创且仅在本地运行。· 实现参考
02

KERN 设计系统设计参考

内容摘自 @kern-ux/native 2.8.2;应用布局选项另行标注。

排版与几何尺寸

来源
名称 / 规则值 / 配置用途
Default fontFira Sans加载打包的字体文件;仅加载 CSS 不会加载字体文件。
Static sizes16 / 18 / 21px小、中、大号静态文本。
Adaptive sizes below 768px21 / 26 / 32 / 48px中号至 2x-large 的自适应字体。
Adaptive sizes from 768px24 / 32 / 48 / 72px软件包会在此媒体查询断点处调整自适应令牌。
Font weights400 / 500 / 600常规、中等与半粗体。
Spacing0, 2, 4, 8, 16, 24, 32, 40, 48, 56, 64, 80, 96, 112, 128, 160, 192px命名间距令牌,而非均匀递增的刻度。
Border widths0 / 1 / 2 / 4 / 8px默认边框为 2px。
Radii0 / 2 / 4 / 8px / 50%无、小、默认、大与圆形。
Focus outline4px默认的 focus-visible 轮廓使用上下文操作的焦点角色。
Specimen width800px这是应用自身的布局选择,并非 KERN 容器令牌。

语义颜色映射

来源
名称 / 规则值 / 配置用途
Light textneutral-950--kern-color-layout-text-default
Dark textneutral-025相同的语义角色会随主题改变。
Light actiondarkblue-700--kern-color-action-default;on-action 为白色。
Dark actiondarkblue-300On-action 会变为黑色。
Light / dark backgroundwhite / black--kern-color-layout-background-default
Theme overridedata-kern-theme="light" or "dark"显式设置的属性优先于系统偏好。
03

KERN 设计系统完整指南

实用指南,介绍如何为真实界面选择、应用和评审此系统。

DESIGN-kern.md

完整指导、实现起点和源代码链接。

下载指南

KERN 设计系统:原生 HTML、CSS 与浏览器行为

软件包提供的内容

KERN native 2.8.2 包含组件 CSS 和字体。示例直接导入这些文件:按钮、文本区域、Details 和 Dialog 均为带有 KERN 类名的原生元素。无需使用 React provider 或 JavaScript 组件构造器。应用负责实现对话框周围的判断逻辑;仅靠样式不会清空输入内容。

摘自本 OpenDesign 指南
  1. 安装固定版本的原生软件包。
  2. 复制样式表和字体文件,并保留它们之间的相对路径。
  3. 保存下面的完整示例,并通过 HTTP 提供该目录。

阅读配套规范

KERN 设计系统:Fira Sans 与自适应字体排版

显式加载字体

kern.min.css 声明使用 Fira Sans;fonts/fira-sans.css 则声明实际字体,并引用相对路径下的 WOFF2 资源。保持字体目录完整,才能避免样式表看似正确、实际却悄然回退到其他字体。静态文本字号保持为 16、18 和 21px;自适应标题和标题令牌则会在 768px 断点处变化。使用标题元素建立层级,并通过相应的 KERN 类设置视觉样式。示例仅保留一个 h1,并为对话框使用独立的 h2。

阅读配套规范

KERN 设计系统:间距、宽度与响应式布局

区分令牌与布局组合

KERN 提供从 0 到 192px 的命名间距令牌,较小间距中还包含 2px 和 4px 的增量。边框与圆角令牌采用独立的刻度。示例采用 24px 的垂直节奏,并使用可换行的操作行。800px 的内容最大宽度和 560px 的对话框最大宽度均为明确的应用布局选择;它们都不代表通用的 KERN 容器尺寸。在窄屏上,页面内边距调整为 16px,对话框宽度则限制在视口范围内。文档不会设置最小视口高度,因此嵌入时不会产生尺寸调整反馈循环。

阅读配套规范

KERN 设计系统:语义颜色与外观

切换语义角色,而不是单独替换十六进制颜色值

该软件包使用语义化的 CSS 属性来设置文本、操作、背景和焦点。浅色和深色调色板会一并切换这些角色。例如,浅色模式下,action-default 映射到 darkblue-700,深色模式下则映射到 darkblue-300;其前景色也会从白色变为黑色。示例在 html 上设置 data-kern-theme,并展示了一个按下状态的按钮。此偏好仅在当前文档中有效,不会保存。移除显式属性后,样式表会根据 prefers-color-scheme 设置主题。

阅读配套规范

KERN 设计系统:带标签的可编辑备注

让说明始终可见

文本区域使用 kern-form-input 中的 kern-form-input__input,并通过指向输入框 id 的真实标签关联。提示文字有自己的 id,并通过 aria-describedby 与输入框保持关联。这是可选的本地备注,因此示例不会凭空添加必填字段错误或服务器保存功能。恢复示例会设置初始值,并将焦点移至可编辑字段。状态区域会播报操作结果,不会替换标签,也不会将焦点移至非交互文本。

阅读配套规范

KERN 设计系统:使用 Details 展示补充信息

让浏览器管理展开状态

details 元素负责管理展开状态;summary 是触发控件。KERN 添加了 kern-details__header、小标题 span 和用于呈现内容的 kern-details__body。示例将保留期限信息放在这里,因为它属于补充内容。必需说明、错误信息和放弃操作始终显示在折叠区域之外。原生键盘行为即可触发展开,无需额外添加点击处理程序或重复维护 aria-expanded 状态。

  • summary 文案应简洁明确。
  • 不要在 summary 中嵌套其他按钮或链接。
  • 一组相关内容需要折叠面板时,请使用 Accordion,不要把无关操作伪装成 Details。

阅读配套规范

KERN 设计系统:确认操作并提供安全退出方式

结构与控制

对话框通过 h2 设置标签,并用简短的后果说明进行描述。页眉、正文和页脚使用 KERN 文档中定义的类。showModal() 会将原生对话框置于顶层;close() 会结束交互。通过 autofocus 将初始焦点设在“保留备注”上。按 Escape 会关闭对话框,但不更改文本;关闭事件监听器会将焦点返回“放弃备注”按钮。只有点击“是,放弃”才会清除内容。这是破坏性确认,因此刻意不响应背景点击。此做法遵循针对关键决策的文档指南,而不是不加区分地照搬通用示例中的点击背景关闭处理程序。

阅读配套规范

KERN 设计系统:集成与适用范围

安装完整依赖链

以下设置会安装一个固定版本的软件包,并复制其 CSS 和字体目录。完整示例包含自己的布局 CSS、根主题属性、DOM 结构和事件处理逻辑。将示例集成到真实表单后,请测试对话框的两种结果、Escape 操作以及窄屏显示效果。KERN 代码采用 EUPL 许可;网站的文字和图形材料则分别遵循 CC BY-NC-SA。此原创示例不会照搬任何机构的身份标识,也不表示某项服务已通过无障碍审查。真实应用仍需实现数据持久化、服务器端验证,并评估完整的用户体验流程。

阅读配套规范

KERN 设计系统组件示例

完整的原生备注与确认示例

包含完整文档标记、布局 CSS 和应用行为;请使用设置代码块安装资源。

html
<!doctype html><html lang="en" data-kern-theme="light"><meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1"><title>KERN workshop note</title><link rel="stylesheet" href="vendor/kern-2.8.2/kern.min.css"><link rel="stylesheet" href="vendor/kern-2.8.2/fonts/fira-sans.css"><style>body{margin:0;padding:clamp(16px,4vw,40px);color:var(--kern-color-layout-text-default)}main{max-width:800px;margin:auto;display:grid;gap:24px}.top,.actions{display:flex;gap:16px;flex-wrap:wrap;align-items:center}.top{justify-content:space-between}.kern-dialog{max-width:min(560px,calc(100% - 32px))}textarea{width:100%;resize:vertical}#status{min-height:24px}.kern-details{width:100%}</style><main><div class="top"><span class="kern-preline">KERN · Native components</span><button class="kern-btn kern-btn--secondary" id="theme" aria-pressed="false"><span class="kern-label">Dark appearance</span></button></div><h1 class="kern-heading kern-heading--large">Workshop note</h1><p class="kern-body">Prepare a short note for your next workshop. This demonstration keeps edits only in this page.</p><div class="kern-form-input"><label class="kern-label" for="note">Your note</label><p class="kern-hint" id="hint">No personal information is needed. Nothing is submitted.</p><textarea class="kern-form-input__input" rows="5" id="note" aria-describedby="hint">Discuss accessible ways to collect workshop feedback.</textarea></div><details class="kern-details"><summary class="kern-details__header"><span class="kern-title kern-title--small">What happens to this note?</span></summary><div class="kern-details__body"><p class="kern-body">Edits live in this browser tab. Reloading restores the example text. Discarding clears the current note after confirmation; it does not delete a server record.</p></div></details><div class="actions"><button class="kern-btn kern-btn--primary" id="discard"><span class="kern-label">Discard note</span></button><button class="kern-btn kern-btn--secondary" id="restore"><span class="kern-label">Restore example</span></button></div><p id="status" class="kern-body" role="status"></p><dialog class="kern-dialog" id="confirm" aria-labelledby="confirm-title" aria-describedby="confirm-description"><header class="kern-dialog__header"><h2 class="kern-title kern-title--large" id="confirm-title">Discard this note?</h2></header><section class="kern-dialog__body"><p class="kern-body" id="confirm-description">Your current text will be cleared from this page. Choose Keep note to continue editing.</p></section><footer class="kern-dialog__footer"><button class="kern-btn kern-btn--secondary" id="keep" autofocus><span class="kern-label">Keep note</span></button><button class="kern-btn kern-btn--primary" id="clear"><span class="kern-label">Yes, discard</span></button></footer></dialog></main><script>const byId=id=>document.getElementById(id),note=byId('note'),modal=byId('confirm'),original=note.value;byId('discard').onclick=()=>modal.showModal();byId('keep').onclick=()=>modal.close('keep');byId('clear').onclick=()=>{note.value='';modal.close('discard');byId('status').textContent='Note discarded from this page.'};modal.addEventListener('close',()=>byId('discard').focus());byId('restore').onclick=()=>{note.value=original;byId('status').textContent='Example restored.';note.focus()};byId('theme').onclick=()=>{const dark=document.documentElement.dataset.kernTheme!=='dark';document.documentElement.dataset.kernTheme=dark?'dark':'light';byId('theme').setAttribute('aria-pressed',String(dark))};</script></html>

代码参考

04

KERN 设计系统 Agent 设置

实现起点

无需构建步骤或 UI 框架。请保留字体目录,因为其中的 CSS 会解析相对路径下的 WOFF2 文件。Sources 中的完整可运行示例 ZIP 还提供了准确的预览依赖项和完整文档。解压后,在该目录中运行 python3 -m http.server 8080,然后打开 http://localhost:8080/kern.html。不要通过 file:// 打开基于模块的示例。

bash
npm install --save-exact @kern-ux/[email protected]
mkdir -p vendor/kern-2.8.2
cp node_modules/@kern-ux/native/dist/kern.min.css vendor/kern-2.8.2/
cp -R node_modules/@kern-ux/native/dist/fonts vendor/kern-2.8.2/
# Save the complete HTML example below as kern.html beside vendor/.
python3 -m http.server 8080
# Open http://localhost:8080/kern.html

适用于你项目的提示词

Agent 提示词
使用 @kern-ux/native 2.8.2 CSS 和随包提供的 Fira Sans,构建本地工作坊备注示例。组合使用带标签的 kern-form-input 文本区域、用于补充信息的原生 Details 折叠区域,以及带有标签、页眉、正文和页脚的 kern-dialog。使用 showModal() 打开对话框,通过 autofocus 将初始焦点设在“保留备注”上;按 Escape 可取消操作且不更改文本;只有点击“是,放弃”才会清除备注。关闭时将焦点返回触发按钮,并提供“恢复示例”功能。通过切换 data-kern-theme 在浅色和深色主题间切换,不要虚构新的调色板令牌。保留原有的应用宽度选项,并让备注仅保存在本地;无需上传内容、保存服务器草稿或声称这是政府服务。
05

KERN 设计系统:来源与范围

使用 KERN 代码制作的原创演示。不代表任何政府机构,也不意味着数据会持久保存或已获得无障碍认证。