政府与公共服务 · 新资源

Canada.ca 设计系统.

通过一份完整的可检索准备指南,探索 GC 设计系统的字体排印、语义化令牌与原生 Web 组件,并涵盖展开收起与空状态行为。

OpenDesign 指南6 个章节29 个参考条目原始应用指南
01

Canada.ca 设计系统 界面预览

筛选六个编写好的主题,展开原生详情面板,并从无结果状态中恢复。

查找准备事项打开完整示例
使用原生 GC Design System 1.6.0 input、details 和 button 自定义元素;内容和筛选功能为本地原创。 · 实现参考
02

Canada.ca 设计系统 设计参考

已发布的 @gcds-core/components 1.6.0 CSS 导出项和组件契约;本地预览内置了 @gcds-core/fonts 1.1.1。

语义颜色与交互角色

来源
名称 / 规则值 / 配置用途
--gcds-text-primary#333为文本、界面表面或交互状态使用对应的语义角色。焦点颜色不是装饰性强调色。
--gcds-text-secondary#595959 为文本、界面表面或交互状态使用对应的语义角色。焦点颜色不是装饰性强调色。
--gcds-bg-primary#26374a 为文本、界面表面或交互状态使用对应的语义角色。焦点颜色不是装饰性强调色。
--gcds-bg-light#f2f2f2 为文本、界面表面或交互状态使用对应的语义角色。焦点颜色不是装饰性强调色。
--gcds-link-default#1f497a 为文本、界面表面或交互状态使用对应的语义角色。焦点颜色不是装饰性强调色。
--gcds-link-hover#1354ec 为文本、界面表面或交互状态使用对应的语义角色。焦点颜色不是装饰性强调色。
--gcds-link-visited#4b248f 为文本、界面表面或交互状态使用对应的语义角色。焦点颜色不是装饰性强调色。
--gcds-focus-background#1354ec 为文本、界面表面或交互状态使用对应的语义角色。焦点颜色不是装饰性强调色。
--gcds-focus-text#fff为文本、界面表面或交互状态使用对应的语义角色。焦点颜色不是装饰性强调色。
--gcds-danger-text#b3192e 为文本、界面表面或交互状态使用对应的语义角色。焦点颜色不是装饰性强调色。
--gcds-disabled-background#d9d9d9 为文本、界面表面或交互状态使用对应的语义角色。焦点颜色不是装饰性强调色。
--gcds-border-default#8c8c8c 为文本、界面表面或交互状态使用对应的语义角色。焦点颜色不是装饰性强调色。

字体排印与可读宽度

来源
名称 / 规则值 / 配置用途
--gcds-font-h1700 2.5625rem/117% "Lato",sans-serif已发布的 CSS 字体排印导出项。评估行长或换行效果前,请先加载 Lato 和 Noto Sans。
--gcds-font-h2700 2.4375rem/123% "Lato",sans-serif已发布的 CSS 字体排印导出项。评估行长或换行效果前,请先加载 Lato 和 Noto Sans。
--gcds-font-h3700 1.8125rem/137% "Lato",sans-serif已发布的 CSS 字体排印导出项。评估行长或换行效果前,请先加载 Lato 和 Noto Sans。
--gcds-font-h4700 1.6875rem/133% "Lato",sans-serif已发布的 CSS 字体排印导出项。评估行长或换行效果前,请先加载 Lato 和 Noto Sans。
--gcds-font-text400 1.25rem/160% "Noto Sans",sans-serif已发布的 CSS 字体排印导出项。评估行长或换行效果前,请先加载 Lato 和 Noto Sans。
--gcds-font-text-small400 1.125rem/155% "Noto Sans",sans-serif已发布的 CSS 字体排印导出项。评估行长或换行效果前,请先加载 Lato 和 Noto Sans。
--gcds-text-character-limit65ch已发布的 CSS 字体排印导出项。评估行长或换行效果前,请先加载 Lato 和 Noto Sans。

间距与容器

来源
名称 / 规则值 / 配置用途
--gcds-spacing-1000.5rem使用导出的 rem 值,不要将令牌后缀当作像素值。
--gcds-spacing-1500.75rem使用导出的 rem 值,不要将令牌后缀当作像素值。
--gcds-spacing-2001rem使用导出的 rem 值,不要将令牌后缀当作像素值。
--gcds-spacing-3001.5rem使用导出的 rem 值,不要将令牌后缀当作像素值。
--gcds-spacing-4002rem使用导出的 rem 值,不要将令牌后缀当作像素值。
--gcds-spacing-6003rem使用导出的 rem 值,不要将令牌后缀当作像素值。
--gcds-container-sm30rem使用导出的 rem 值,不要将令牌后缀当作像素值。
--gcds-container-md48rem使用导出的 rem 值,不要将令牌后缀当作像素值。
--gcds-container-lg62rem使用导出的 rem 值,不要将令牌后缀当作像素值。
--gcds-container-xl71.25rem使用导出的 rem 值,不要将令牌后缀当作像素值。
03

Canada.ca 设计系统 完整指南

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

DESIGN-canada-ca.md

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

下载指南

Canada.ca 设计系统 当前组件与软件包范围

使用当前命名空间

GC Design System 是此 Canada.ca 资源使用的组件系统。此示例固定使用 @gcds-core/components 1.6.0,并注册独立的 input、details 和 button 自定义元素。较旧的示例可能使用 @cdssnc 命名空间。请依据实际安装的软件包版本操作,不要混用其他版本的注册代码。

摘自本 OpenDesign 指南

将内容研究与服务区分开来

此示例展示六个编写好的准备事项主题。它不包含加拿大政府标识、预约集成或强制文件相关声明。其目的是演示真正可搜索的披露模式。复用这些组件,并不意味着某个应用就是官方服务,也不代表其内容符合 Canada.ca 的所有要求。

Canada.ca 设计系统 字体排印与阅读节奏

加载两种字体

标题使用 Lato,正文使用 Noto Sans。已发布的桌面正文角色为 1.25rem,行高为 160%;导出的可读宽度参考值为 65ch。这些值营造的阅读节奏比紧凑型仪表板开阔得多。本地预览内置了已发布的字体文件,因此即使外部字体请求失败,也不会在不易察觉的情况下改变显示效果。

完整遵循字体简写属性

令牌表包含实际的 CSS 字体简写属性,而不只是名义上的像素大小。字重、行高和字体系列需要综合考虑。主标题下方的短红线是灵感源自 Canada.ca 的原创构图细节;其 72px 宽度并非通用的 GC 间距令牌。视口较窄时,布局会变为单列,同时保持正文的可读性。

Canada.ca 设计系统 语义颜色与焦点行为

使用公开角色表达有意义的状态

主要文本颜色为 #333,次要文本颜色为 #595959,克制的蓝色界面表面角色为 #26374a。在导出的 CSS 中,链接、焦点和危险状态各有其独立角色。链接不能仅通过颜色变化来识别:原生 details 披露组件还提供了操作提示和可访问的展开状态。

不要移除可见的焦点样式

原生输入框和按钮会提供各自的组件焦点行为。应用的 CSS 负责周边布局,不会深入 shadow root 删除轮廓线。重置操作会将焦点返回搜索框,键盘用户可以立即调整查询。Shadow DOM 会改变自定义样式和可见性规则的适用方式,因此请检查实际渲染的组件,不要认为普通元素选择器可以覆盖所有状态。

Canada.ca 设计系统 详情内容与信息优先级

将披露面板用于补充说明

每个原生 gcds-details 都会在默认插槽中接收 details-title 和辅助文本。重要说明应始终保留在可见的侧边栏中。实际的预约时间、地址或要求不得只在展开面板后才显示。六个示例主题仅用于提供信息;它们不会收集身份信息,也不会模拟完成预约。

  • 确保重要服务信息无需展开即可查看。
  • 使用简短明确的详情标题。
  • 避免嵌套披露,以免内容难以查找。

筛选时保留展开状态

Canada.ca 设计系统 搜索状态与无结果恢复

监听文档规定的自定义事件

gcds-input 要求提供 label、input-id 和 name。其 gcdsInput 事件会在 event.detail 中提供新值。应用会将去除首尾空格并转换为小写的查询,与主题标题和正文进行比对。实时状态会播报可见结果数量;没有匹配项时,会显示实用的恢复提示,而不是留下令人困惑的空白区域。

让重置成为完整的状态转换

次要原生按钮会清除组件值、恢复全部六个条目,并将焦点移至内部输入框。它不会重置读者之前展开的内容。这种分离让查询状态和阅读状态保持清晰可预测。生产环境中针对远程数据集的搜索还需要处理加载状态、请求失败和结果排序规则;这个本地六项筛选器不需要这些功能。

Canada.ca 设计系统 完整的 JavaScript 集成

重现可运行的示例

创建一个 Vite vanilla 项目,安装固定版本的组件包,并用下方完整的 JavaScript 替换入口文件。将 canada.css 保存在同一目录下,并保留根挂载元素。直接使用自定义元素入口时,所需依赖会自动注册;该包 CSS 提供令牌层。源码包含完整的数据集、注册逻辑、筛选和重置行为。

  1. 在 Vite vanilla 项目中安装固定版本的包。
  2. 保存完整的入口文件和 canada.css,并保留根挂载元素。
  3. 搜索一个没有匹配项的词语,并确认会显示恢复提示。
  4. 重置后展开一个主题,再次筛选,确认阅读状态仍然保留。

隐藏结果包装元素,同时保留展开状态

将每个 gcds-details 放在普通包装元素中,并在筛选时切换该包装元素的 hidden 状态。否则,自定义元素自身的显示规则可能不符合通用 CSS 选择器的预期。保持组件实例处于挂载状态,这样清除查询后,已展开的主题就能以原有状态重新显示。

搜索和展开内容是两个独立的控件。通过 gcdsInput event.detail 读取查询,播报结果数量,并让原生 details 元素自行管理展开状态。重置时应同时更新组件值和查询模型,然后将焦点恢复到输入框;重新创建整个结果区域会让读者丢失当前位置。

Canada.ca 设计系统组件示例

main.js — 完整的原生主题筛选器

完整入口文件,包含组件注册、自定义主题、筛选、展开状态保留和重置逻辑。

javascript
import {defineCustomElement as input} from '@gcds-core/components/dist/components/gcds-input.js';
import {defineCustomElement as details} from '@gcds-core/components/dist/components/gcds-details.js';
import {defineCustomElement as button} from '@gcds-core/components/dist/components/gcds-button.js';
import '@gcds-core/components/dist/gcds/gcds.css';
import './canada.css';
input();details();button();
document.getElementById('root').innerHTML=`<main><p class="eyebrow">GC DESIGN SYSTEM / ORIGINAL CONTENT STUDY</p><h1>Prepare for an appointment</h1><p class="lead">Find a preparation topic in this fictional service guide. These are sample explanations, not government requirements.</p><div class="search-row"><gcds-input id="filter" input-id="topic-search" name="topic-search" label="Filter preparation topics" hint="Try time, access or documents." type="search"></gcds-input><gcds-button id="reset" button-role="secondary" type="button">Reset filter</gcds-button></div><div class="layout"><section aria-labelledby="topic-heading"><h2 id="topic-heading">Preparation topics</h2><p id="count" role="status"></p><div id="topics"></div><div id="empty" hidden><h3>No matching topic</h3><p>Try a shorter word or reset the filter.</p></div></section><aside><h2>Before you continue</h2><p>Important information stays visible. Expandable details are reserved for supporting explanations.</p><ol><li>Confirm the purpose of the appointment with the real service.</li><li>Check its current requirements and contact information.</li><li>Ask for help if an instruction is unclear.</li></ol><p class="small">Native GC Design System components 1.6.0. No official identity marks or real service claims are used.</p></aside></div></main>`;
const topics=[['Confirm the time','Check the time and time zone shown in a real booking confirmation. This sample does not contain a live appointment.'],['Review the location','A real service should provide an address or joining instructions. A location belongs in visible booking details, not only inside a collapsed panel.'],['Plan access needs','Ask the service about accessibility arrangements through its official contact route. This sample demonstrates disclosure behavior and does not promise a particular accommodation.'],['Check documents','Follow the actual service’s published document requirements. This authored example intentionally does not invent a list of mandatory identity documents.'],['Keep a reference','If the service provides a booking reference, keep it with your confirmation. Do not paste personal reference numbers into this public specimen.'],['Prepare questions','Write down what you want to understand. In a real service, clear preparation content can reduce the need to remember questions during the appointment.']];const $=id=>document.getElementById(id);const entries=topics.map(([title,text])=>{const el=document.createElement('gcds-details');el.setAttribute('details-title',title);const p=document.createElement('p');p.textContent=text;el.append(p);const wrapper=document.createElement('div');wrapper.append(el);$('topics').append(wrapper);return{el,wrapper,title,text}});function render(q=''){let count=0;for(const item of entries){item.wrapper.hidden=!(item.title+' '+item.text).toLowerCase().includes(q.trim().toLowerCase());if(!item.wrapper.hidden)count++}$('count').textContent=count+' of '+topics.length+' sample topics';$('empty').hidden=count>0}$('filter').addEventListener('gcdsInput',e=>render(e.detail));$('reset').addEventListener('click',()=>{$('filter').value='';render();$('filter').shadowRoot.querySelector('input')?.focus()});render();

代码参考

  • 将文件保存为 src/main.js,并保留根挂载元素。已发布的包 CSS 会加载默认字体 URL;此本地预览使用相同的公开字体。

canada.css — 响应式内容布局

围绕原生组件样式构建的原始页面布局。

css
*{box-sizing:border-box}body{margin:0;background:white;color:var(--gcds-text-primary);font:var(--gcds-font-text)}main{padding:32px}h1{font:var(--gcds-font-h1);margin:16px 0 24px;max-width:24ch}h1:after{content:'';display:block;width:72px;height:6px;background:#a62a1e;margin-top:16px}h2{font:var(--gcds-font-h3);margin:0 0 24px}h3{font:var(--gcds-font-h4)}p{margin:0 0 24px;max-width:65ch}.eyebrow,.small{font:var(--gcds-font-text-small)}.lead{max-width:65ch}.search-row{display:flex;align-items:end;gap:24px;margin:32px 0;border-top:1px solid #ccc;padding-top:24px}.search-row gcds-input{flex:1;max-width:650px}.search-row gcds-button{margin-bottom:var(--gcds-input-margin)}.layout{display:grid;grid-template-columns:1.6fr 1fr;gap:48px}aside{background:var(--gcds-color-grayscale-50);border-left:4px solid var(--gcds-color-blue-muted);padding:24px;align-self:start}aside h2{font:var(--gcds-font-h4)}aside ol{padding-left:24px}aside li{padding-left:8px;margin:16px 0}#count{font:var(--gcds-font-text-small)}#empty{padding:24px;background:var(--gcds-color-grayscale-50)}gcds-details{display:block}gcds-details p{padding-top:8px}[hidden]{display:none!important}@media(max-width:767px){main{padding:20px}.layout{grid-template-columns:1fr;gap:32px}.search-row{display:block}.search-row gcds-button{display:block;margin-top:16px}h1{font-size:2rem}aside{padding:20px}}

代码参考

  • 布局断点和标题下划线的几何样式是本示例的设计选择,并非额外的官方令牌。
04

Canada.ca 设计系统 Agent 设置

实现起点

本地预览运行固定版本的自定义元素;无需远程服务或凭据。

sh
npm create vite@latest gc-topics -- --template vanilla
cd gc-topics
npm install
npm install @gcds-core/[email protected]
# Replace src/main.js and add src/canada.css; keep <div id="root"></div>.
npm run dev

适用于你项目的提示词

Agent 提示词
使用 GC Design System 1.6.0 构建包含六个主题的准备指南。加载官方字体和令牌 CSS,使用原生输入、details 和按钮组件,在筛选时保留展开状态,播报结果数量,并提供完整的重置行为。确保重要内容始终可见,并明确区分示例说明与官方服务要求。
05

Canada.ca 设计系统 来源与范围

由 OpenDesign 编写、基于 GC Design System 1.6.0 的 Canada.ca 应用研究示例。示例主题为虚构指南,并非政府要求或官方预约服务。