用途:本模式用于创建可访问、可交互的链接,处理网页导航中最基础也最常见的交互元素——通过可点击文本或元素连接页面、资源与操作。
主要能力:帮助开发者在 <a> 与 <button> 之间做出正确选择,设计清晰的交互状态,保证颜色对比度,并说明链接去向(尤其针对外部目标、下载与新标签页行为)。
适用场景:站内页面跳转、外部网站或资源链接、当前页锚点跳转、文件下载(PDF、图片、文档)、mailto: 邮箱和 tel: 电话链接。
避免使用:页内动作应使用 <button>;表单提交用 <button type="submit">;切换 UI 状态(打开弹窗、展开折叠面板)不应使用链接;动作没有有意义 URL 时不用链接;不要用链接包裹大面积可交互区域,应使用单一锚点的卡片模式。
实现流程:先确认模式与问题、约束匹配,再从 references/pattern.md 的解剖与示例中选择最小可行变体,应用无障碍、性能与交互护栏后再做视觉润色,最后按测试指引验证键盘、屏幕阅读器、响应式与失败场景。
无障碍要求:所有导航链接使用原生 <a> 并提供有效 href;链接文本与背景对比度需达 4.5:1(WCAG AA);提供下划线或图标等非颜色视觉提示;可见文本不足时(如图标链接)添加 aria-label 或 aria-describedby;target="_blank" 需用可见文本或 aria-label 提示用户;每个页面第一个可聚焦元素应包含跳转导航链接。禁止用带点击事件的 <span> 或 <div> 冒充链接,也不得在无替代方案时移除默认焦点轮廓。
性能护栏:悬停/聚焦视觉反馈小于 50ms,点击后浏览器立即开始导航,焦点轮廓渲染小于 16ms,基础链接为 0KB JavaScript(纯 HTML/CSS)。内部链接可用 <link rel="prefetch" href="/pricing" /> 或框架级悬停预取。
常见错误:使用“点击这里”作为链接文本,屏幕阅读器列出链接时失去上下文,应改为“查看价格方案”等描述性文本;用 href="#" 或 javascript:void(0) 触发 JS 动作会破坏浏览器预期,应改用 <button>;target="_blank" 缺少提示会让用户迷失,应加“(opens in new tab)”或写入 aria-label。
相关模式:按钮、面包屑、导航菜单。完整实现细节、示例与测试说明见 references/pattern.md,模式页为 https://uxpatterns.dev/patterns/navigation/link。