政府与公共服务 · 新资源

NHS 设计系统.

运用 NHS.UK 的字体、响应式间距、分组单选项和情境化详情,打造清晰的预约偏好选择流程。

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

NHS 设计系统 界面预览

选择一种方式,查看可选帮助,处理未作答的问题,并修改偏好。

预约偏好与本地检查打开完整示例
原生 NHS.UK frontend 10.6.1 CSS/JS、Arial 覆盖设置及原生本地状态;未集成临床服务。· 实现参考
02

NHS 设计系统 设计参考

NHS.UK frontend 10.6.1 和 NHS 数字服务手册。预览使用带 Arial 字体的官方本地 CSS/JS,不使用需授权的 Frutiger 字体或 NHS 标志。响应式数值已根据所选软件包进行核对;未提供临床内容。

字体与品牌标识

来源
名称 / 规则值 / 配置用途
Font stackFrutiger W01, Arial, sans-serifFrutiger 需要获得相应授权;本研究选用 Arial。
nhsuk-body16px small / 19px large默认正文文本。
nhsuk-body-l26px desktop引导段落,不用于每一条介绍性文字。
nhsuk-body-s14px small / 16px large谨慎使用的次要信息。
nhsuk-heading-lTransactional h1后续的 h2 使用 heading-m。

语义化颜色变量

来源
名称 / 规则值 / 配置用途
$nhsuk-text-colour#212b32 正文内容
$nhsuk-secondary-text-colour#4c6272 提示
$nhsuk-link-colour#005eb8 链接目标
$nhsuk-focus-colour#ffeb3b 键盘焦点
$nhsuk-border-colour#d8dde0 结构边界
$nhsuk-input-border-colour#4c6272 输入框边界
$nhsuk-error-colour#d5281b 验证反馈
$nhsuk-button-colour#007f3b 主要操作

响应式间距

来源
名称 / 规则值 / 配置用途
nhsuk-u-margin-bottom-14px → 4px小屏幕 → 768px 以上;使用该类,不要在本地重复定义。
nhsuk-u-margin-bottom-28px → 8px小屏幕 → 768px 以上;使用该类,不要在本地重复定义。
nhsuk-u-margin-bottom-38px → 16px小屏幕 → 768px 以上;使用该类,不要在本地重复定义。
nhsuk-u-margin-bottom-416px → 24px小屏幕 → 768px 以上;使用该类,不要在本地重复定义。
nhsuk-u-margin-bottom-524px → 32px小屏幕 → 768px 以上;使用该类,不要在本地重复定义。
nhsuk-u-margin-bottom-632px → 40px小屏幕 → 768px 以上;使用该类,不要在本地重复定义。
nhsuk-u-margin-bottom-740px → 48px小屏幕 → 768px 以上;使用该类,不要在本地重复定义。
nhsuk-u-margin-bottom-848px → 56px小屏幕 → 768px 以上;使用该类,不要在本地重复定义。
nhsuk-u-margin-bottom-956px → 64px小屏幕 → 768px 以上;使用该类,不要在本地重复定义。

页面布局

来源
名称 / 规则值 / 配置用途
nhsuk-width-container960px maximum固定宽度的外层容器。
nhsuk-main-wrapper--sSmaller vertical wrapper适用于事务型服务。
nhsuk-grid-column-two-thirdsDesktop column; mobile stack网格宽度从 769px 起生效。
Breakpoints320 / 641 / 769 / 990px手机、平板、桌面、大型桌面。
nhsuk-u-reading-widthReadable content measure外围容器较宽时使用。
03

NHS 设计系统 完整指南

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

DESIGN-nhs.md

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

下载指南

NHS 设计系统 NHS 背景与字体

不冒用身份的医疗界面

NHS.UK frontend 提供视觉和交互基础,但不会安排咨询,也不会决定诊所支持哪些出席方式。本研究展示一个虚构的预约,并允许访客选择偏好。选择结果仅供本地查看,并非预约。

摘自本 OpenDesign 指南

Frutiger 是 NHS 品牌资产,使用时须遵守授权条件。本独立资源使用文档注明的回退字体 Arial,且不包含 NHS 标志。官方 CSS 保持不变;显式的本地字体覆盖设置可避免请求 Frutiger。

阅读配套规范

NHS 设计系统 事务型字体排版

用问题本身建立层级

页面问题使用 nhsuk-heading-l,次级章节使用 nhsuk-heading-m。这与长篇编辑类页面不同,后者的指南内容从 heading-xl 开始。单选字段集的图例可以采用标题字号,同时保留分组语义。

常规段落类用于区分正文、引导文字和小号辅助文案。页面开头适合使用一次 26px 的引导文字,而预约说明应保持普通正文样式。预览保留了足够的行宽,便于日期和地点名称换行。

阅读配套规范

NHS 设计系统 间距与容器

NHS 间距体系不同于 GOV.UK 间距刻度

NHS 响应式单位采用不同的序列,并在 768px 以上切换。例如,单位 6 会从 32px 变为 40px。不要仅因辅助类名称相似,就把 GOV.UK 的 unit-6 数值用于 NHS。

示例使用 960px 容器和三分之二宽度的阅读栏。原生网格行为会在桌面断点以下切换为单列布局。布局变化由库控制,小型独立身份标识条则由应用样式控制。

scss
.appointment-section {
  @include nhsuk-responsive-margin(6, "bottom");
}

代码参考

阅读配套规范

响应式断点

文档将 641px 定义为平板断点,将 769px 定义为桌面断点。网格列宽从桌面断点起生效,但这并不意味着所有字体规则都要等到同一个断点才生效。请使用原生类,不要为所有属性实现一个统一断点。

阅读配套规范

NHS 设计系统 分组选项:出席方式

一个字段集,一个答案

示例使用 nhsuk-fieldset,包含可见图例,并为单选输入使用相同的 name 属性。每个输入都有各自的 id 和标签。通过 aria-describedby 将提示与整个分组关联。这些关系让浏览器能够将其作为一组选一的选项呈现。

单选项结构会将输入和标签放在 nhsuk-radios__item 内。标准单选项适用于主要问题;小号变体适用于更紧凑的筛选场景。使用方向键操作时,虚构的出席选项仍保持互斥。

  • 图例说明要做出的选择。
  • 共用的 attendance name 属性将选项组成一个选择组。
  • 每个标签都指向不同的输入 ID。

阅读配套规范

NHS 设计系统 提供帮助,但不隐藏关键信息

使用原生 details 元素

details 示例包含 nhsuk-details__summary 和 summary-text span,后面接 nhsuk-details__text。它使用浏览器原生行为展开。预约身份和“不会进行任何预约”的说明应放在 disclosure 外,因为每个人都需要看到这些信息。

在 10.6 中,Nunjucks API 使用 summary.text 或 summary.html;较旧的 summaryText 选项已弃用。如果使用宏,建议采用新的对象结构。HTML 示例无需依赖模板,同时保留相同的结构。

阅读配套规范

NHS 设计系统 选项错误与回顾

验证选项组,但不要预先选择选项

初始状态下不选择任何选项。未作答就继续时,会显示行内错误,并将选项组与该错误信息关联。随后预览会聚焦到错误信息。返回回顾页面时,已选选项仍会显示。这些是叠加在原生控件之上的应用状态决策。

回顾页面会再次显示所选方式和虚构的预约身份。操作按钮标注为“更改偏好”。页面不会显示暗示临床服务已接受该偏好的确认信息,也不会虚构健康建议或准备要求。

  1. 请先选择出席方式,再继续。
  2. 选择“电话”,然后打开本地回顾页面。
  3. 将偏好更改为“亲自到场”,并检查更新后的回顾页面。

阅读配套规范

NHS 设计系统 本地前端资源

使用选定的软件包和模块

此设置会将 10.6.1 CSS 和浏览器模块复制到静态资源目录。该模块导出 initAll;请在组件标记生成后调用它。独立示例使用同一份本地提供的发行版本,并在页面级别覆盖为 Arial。

样式包含组件规则和响应式基础样式。用于更改回顾面板的小型脚本属于独立的应用代码。生产服务应以维护中的数据替换虚构的预约记录,并通过自己的后端处理实际的偏好请求。

阅读配套规范

NHS 设计系统 检查组合方案

确认医疗服务场景

关键检查点是:访客能够识别预约,理解出席偏好尚未确认,并能在不丢失上下文的情况下更改所选方式。通用的成功提示会模糊这一区别。

使用键盘操作单选按钮组和 details 摘要,然后在窄屏视图中检查较长的诊所名称。未选择选项时,错误应引导用户返回选项组。该库提供可复用的行为,但实际预约规则和临床信息仍由相关机构负责。

阅读配套规范

NHS 设计系统组件示例

出席方式单选按钮组

使用带标签的 fieldset,包含互斥的原生输入控件和 NHS 组件类。

html
<fieldset class="nhsuk-fieldset" aria-describedby="contact-hint">
  <legend class="nhsuk-fieldset__legend nhsuk-fieldset__legend--m">How would you prefer to attend?</legend>
  <div class="nhsuk-hint" id="contact-hint">Select one option.</div>
  <div class="nhsuk-radios" data-module="nhsuk-radios">
    <div class="nhsuk-radios__item">
      <input class="nhsuk-radios__input" id="in-person" name="attendance" type="radio" value="in-person">
      <label class="nhsuk-label nhsuk-radios__label" for="in-person">In person</label>
    </div>
    <div class="nhsuk-radios__item">
      <input class="nhsuk-radios__input" id="telephone" name="attendance" type="radio" value="telephone">
      <label class="nhsuk-label nhsuk-radios__label" for="telephone">Telephone</label>
    </div>
  </div>
</fieldset>

代码参考

可选的上下文帮助

原生 details 元素可展示补充信息,而不会隐藏当前任务。

html
<details class="nhsuk-details">
  <summary class="nhsuk-details__summary">
    <span class="nhsuk-details__summary-text">About these example choices</span>
  </summary>
  <div class="nhsuk-details__text"><p>These are fictional options, not available appointment slots.</p></div>
</details>

代码参考

完整的独立示例

完整文档包含其布局、控件与初始化。解压所链接的示例归档,即可获得完全一致的相对 vendor 资源,然后通过 HTTP 提供服务。

html
<!doctype html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1"><title>Appointment preference — OpenDesign study</title><link rel="stylesheet" href="vendor/nhsuk-10.6.1/nhsuk-frontend.min.css"><style>body,body *,body *::before,body *::after{font-family:Arial,sans-serif!important}[hidden]{display:none!important}.study-strip{background:white;border-bottom:1px solid #d8dde0;padding:16px}.study-strip p{margin:0}.study-card{background:#fff;border:1px solid #d8dde0;padding:24px;margin-bottom:32px}h1:focus{outline:none}.study-result{border-left:4px solid #005eb8;padding:16px 24px;background:white}button,a,input{touch-action:manipulation}</style></head><body><header class="study-strip"><p class="nhsuk-body-s"><strong>OpenDesign · NHS component study</strong><br>Fictional appointment. This page cannot book or change care.</p></header><main class="nhsuk-width-container nhsuk-main-wrapper nhsuk-main-wrapper--s" id="maincontent"><div class="nhsuk-grid-row"><div class="nhsuk-grid-column-two-thirds"><div class="study-card"><h2 class="nhsuk-heading-m">Example appointment</h2><p class="nhsuk-body">Community clinic · Alex Example<br>Tuesday, 20 October · 10:30am</p></div><section id="choice"><h1 class="nhsuk-heading-l">Choose an attendance preference</h1><form id="form" novalidate><div class="nhsuk-form-group" id="group"><fieldset class="nhsuk-fieldset" aria-describedby="contact-hint">
  <legend class="nhsuk-fieldset__legend nhsuk-fieldset__legend--m">How would you prefer to attend?</legend>
  <div class="nhsuk-hint" id="contact-hint">Select one option.</div>
  <div class="nhsuk-radios" data-module="nhsuk-radios">
    <div class="nhsuk-radios__item">
      <input class="nhsuk-radios__input" id="in-person" name="attendance" type="radio" value="in-person">
      <label class="nhsuk-label nhsuk-radios__label" for="in-person">In person</label>
    </div>
    <div class="nhsuk-radios__item">
      <input class="nhsuk-radios__input" id="telephone" name="attendance" type="radio" value="telephone">
      <label class="nhsuk-label nhsuk-radios__label" for="telephone">Telephone</label>
    </div>
  </div>
</fieldset></div><details class="nhsuk-details">
  <summary class="nhsuk-details__summary">
    <span class="nhsuk-details__summary-text">About these example choices</span>
  </summary>
  <div class="nhsuk-details__text"><p>These are fictional options, not available appointment slots.</p></div>
</details><button class="nhsuk-button" type="submit">Review preference</button></form></section><section id="review" hidden><h1 class="nhsuk-heading-l" tabindex="-1" id="review-title">Your preference</h1><div class="study-result"><p class="nhsuk-body" id="selected"></p><p class="nhsuk-body">This is a local example. The appointment has not changed.</p></div><button class="nhsuk-button nhsuk-button--secondary nhsuk-u-margin-top-5" id="change" type="button">Change preference</button></section><p class="nhsuk-body-s">Native 10.6.1 controls with Arial. <a href="vendor/nhsuk-10.6.1/LICENSE.txt">Frontend licence</a>.</p></div></div></main><script type="module">import{initAll}from './vendor/nhsuk-10.6.1/nhsuk-frontend.min.js';initAll();const form=document.getElementById('form'),group=document.getElementById('group'),fs=group.querySelector('fieldset');form.addEventListener('submit',e=>{e.preventDefault();document.getElementById('error')?.remove();group.classList.remove('nhsuk-form-group--error');fs.setAttribute('aria-describedby','contact-hint');const value=form.querySelector(':checked')?.value;if(!value){group.classList.add('nhsuk-form-group--error');const p=document.createElement('p');p.id='error';p.className='nhsuk-error-message';p.tabIndex=-1;p.textContent='Select how you would prefer to attend';fs.querySelector('.nhsuk-radios').before(p);fs.setAttribute('aria-describedby','contact-hint error');p.focus();return}document.getElementById('selected').textContent='Selected method: '+(value==='telephone'?'Telephone':'In person');document.getElementById('choice').hidden=true;document.getElementById('review').hidden=false;document.getElementById('review-title').focus()});document.getElementById('change').addEventListener('click',()=>{document.getElementById('review').hidden=true;document.getElementById('choice').hidden=false;form.querySelector(':checked').focus()});</script></body></html>

代码参考

  • 从“来源”一节下载完整示例。其 README 给出了确切的本地启动命令。
  • 保持 vendor 路径相对于本文档;该归档包含此预览所使用的全部资源。
04

NHS 设计系统 Agent 设置

实现起点

将 shell 命令和 HTML 分别放入对应文件。Arial 是独立预览中明确指定的覆盖字体;NHS 机构应遵守实际的字体许可和品牌要求。Sources 中的完整可运行示例 ZIP 还提供了准确的预览依赖项和完整文档。将其解压到相应目录,在该目录中运行 python3 -m http.server 8080,然后打开 http://localhost:8080/nhs.html。请勿通过 file:// 打开基于模块的示例。

sh / html
npm install [email protected]
mkdir -p public/assets
cp node_modules/nhsuk-frontend/dist/nhsuk/nhsuk-frontend.min.css public/assets/
cp node_modules/nhsuk-frontend/dist/nhsuk/nhsuk-frontend.min.js public/assets/

<link rel="stylesheet" href="/assets/nhsuk-frontend.min.css">
<style>body, body *, body *::before, body *::after { font-family: Arial, sans-serif !important; }</style>
<script type="module">
  import { initAll } from '/assets/nhsuk-frontend.min.js';
  initAll();
</script>

适用于你项目的提示词

Agent 提示词
使用 NHS.UK Frontend 10.6.1 构建一个独立的预约偏好问题。使用 fieldset 和 legend 组织互斥的出席方式,并为单选按钮添加关联提示;使用原生 Details 提供可选帮助。让问题和必要说明始终可见。用户在未作答时进入回顾页面,应显示带链接的错误摘要和行内错误;返回本地回顾页面时,保留已选方式。加载对应的 CSS 和模块 initAll,并使用文档中明确说明的 Arial 研究覆盖设置。不要添加预约查询、实际预约更改、临床建议或任何暗示与 NHS 有关的身份声明。
05

NHS 设计系统 来源与范围

基于 NHS.UK frontend 10.6.1 的独立预约偏好研究。不使用 NHS 标志、授权字体 Frutiger、真实预约或临床说明,也不暗示获得认可。