01 NHS 设计系统 界面预览 选择一种方式,查看可选帮助,处理未作答的问题,并修改偏好。
原生 NHS.UK frontend 10.6.1 CSS/JS、Arial 覆盖设置及原生本地状态;未集成临床服务。·
实现参考 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 提供视觉和交互基础,但不会安排咨询,也不会决定诊所支持哪些出席方式。本研究展示一个虚构的预约,并允许访客选择偏好。选择结果仅供本地查看,并非预约。
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 设计系统 选项错误与回顾 验证选项组,但不要预先选择选项 初始状态下不选择任何选项。未作答就继续时,会显示行内错误,并将选项组与该错误信息关联。随后预览会聚焦到错误信息。返回回顾页面时,已选选项仍会显示。这些是叠加在原生控件之上的应用状态决策。
回顾页面会再次显示所选方式和虚构的预约身份。操作按钮标注为“更改偏好”。页面不会显示暗示临床服务已接受该偏好的确认信息,也不会虚构健康建议或准备要求。
请先选择出席方式,再继续。 选择“电话”,然后打开本地回顾页面。 将偏好更改为“亲自到场”,并检查更新后的回顾页面。 阅读配套规范
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 路径相对于本文档;该归档包含此预览所使用的全部资源。 实现起点 将 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 有关的身份声明。 基于 NHS.UK frontend 10.6.1 的独立预约偏好研究。不使用 NHS 标志、授权字体 Frutiger、真实预约或临床说明,也不暗示获得认可。