跳到正文
定位、使用者与职责边界
定位、使用者与职责边界
搜索 YUDS 文档

YUDS 文档

导航组件:位置、切换与返回

导航组件如何表达位置、切换与返回:壳与账户入口、链接、面包屑、标签页、侧边导航、分页与工具栏。

状态:本页是导航组件族行为与参数引用的唯一主档。面包屑折叠、标签页溢出、侧边导航取值与键盘、复合工具栏等做法标为候选;壳的账户切换与跨窗口边界、链接的过期授权与 SPA 意图、分页的游标与读取代次为 YUDS 推导或通用组合建议,CMP 编号只用于规范追踪,不是组件 API。外部来源只支撑注明的范围(SAP 壳相关仅为 D 级目录证据),文档反审不代表真实平台或辅助技术通过;本页没有原生 API、可用版本或运行通过声明,全部夹具运行未执行。 更新:2026-10-19(APG Link 正文读取);官方来源核查于 2026-10-18。 所属章节:基础组件与交互契约

本页是导航组件族行为与参数引用的唯一主档;使用选型、解剖与正反例见组件使用手册:从任务选型到页面组合。共同设计与验收边界见基础组件与交互契约,本页的特殊条件与来源限制就近说明。

导航围绕业务对象与用户任务组织入口,并区分全局导航与对象内部导航;本页不新设固定层级或布局。

本页依次覆盖:

  • 导航共同边界
  • B1-SHELL 壳、账户与范围入口
  • CMP-20 / PRM-LINK 链接
  • CMP-21 面包屑
  • CMP-22 标签页
  • CMP-23 侧边导航
  • CMP-24 / PAG-DATA 分页
  • CMP-25 工具栏与溢出
  • 组合验证与主档索引

1. 导航共同边界

每次切换都能回答:去哪里、仍是哪个对象、哪些上下文会变化。选中样式表示当前位置,焦点表示当前键盘目标,两者不同。链接失败、目标不存在、权限变化和加载中各自表达。不得显示新对象标题配旧对象数据,异步切换必须按对象与请求身份隔离。

返回时可恢复仍有效的筛选、位置、列设置和阅读上下文;执行过的动作不自动重放。原对象已不可用时,说明情况并给出合理的替代入口。未保存输入的离开保护由工作流程统一处理,导航组件提供可拦截的切换意图。

2. B1-SHELL 壳、账户与范围入口

本节规定壳与账户/范围入口的组合边界。离开仲裁引用导航、深链接与上下文保留的 NAV-01—NAV-05;用户菜单的完整定义仅在操作组件:按钮与动作入口的 CMP-05;浮层与响应式只复用浮层组件:对话框、抽屉与提示的 CMP-LAYER、CMP-LAYER-RESP、LP-DRAWER。

2.1 用途、结构与范围

壳为跨页面的稳定导航及当前上下文提供入口;它不承担所有任务动作,也不等同于 SAP Launchpad 宿主。最小结构按实际需要选择:产品/当前位置、可识别的导航、当前账户与当前范围、全局可用入口、用户入口、到主内容的直接路径。搜索/通知只在产品真实支持时出现,并说明其范围;不因参考目录中存在,就新增全局搜索、通知中心或账户服务。

头像是身份呈现,用户菜单是动作入口,账户/工作范围切换是独立且可能受保护的上下文变更。不可借点击头像直接暗中切换账户。头像加载失败不影响可达名称;名称可能重复时,使用允许披露的区分信息。用户菜单可含资料/设置/退出等真实能力,不添加假入口;仅展示普通页面链接时采用导航链接/展开结构,采用 menu 语义时必须兑现完整的菜单交互。包含任意表单的账户面板采用其真实的面板/表单语义,不能仅套 menu 角色。

2.2 状态、事件与权限

账户身份、已接受范围、请求目标范围、菜单展开、路由、会话有效性分别记录。菜单开关不提交页面草稿;打开一个全局入口时,按 CMP-LAYER 处理已有子层与任务,不全局清空局部状态。

S001→S002 的流程先记录明确的目标请求,再经过现有离开保护和权限检查,最后将已接受范围与其可用路由/内容一致更新。等待时不能出现 S002 标头配 S001 数据;若保留 S001 工作区,应明确仍处于 S001。切换失败不显示目标已生效;若旧范围已无权恢复,则显示安全恢复入口,不伪装回滚成功。确认过程中新的目标请求不能偷换对话所述的目标;复用 LP-DRAWER 现有的串行决策候选,不自动排队执行未再确认的切换。

提交中的写入仍属于原范围任务,核查与回执仅在当前允许披露的范围内呈现;账户切换不迁移旧任务所有权,不向新账户展示旧账户的受限结果,也不重发旧操作;切换/退出/关窗口不是取消已发写入的证据。不同账户之间不得迁移旧草稿、选择、最近项、搜索建议、通知详情及个性化缓存。范围切换后,只有当前授权和版本允许的数据可恢复;迟到响应不能复活旧用户的头像名称、路由、搜索建议、徽标数或无障碍播报。会话失效时只说明可验证的事实,不默认所有写入失败;重新登录不重放动作。

多窗口仅按宿主的真实能力同步权限/身份失效,不能宣称统一广播保证。收到有效失效信号时,重新核验并清理不再允许的内容;离线窗口和没有同步能力的平台须列为能力缺口。授权变化不以“菜单里隐藏入口”为唯一防护,实际执行仍由服务端核准。

2.3 键盘、布局与平台

页面提供语义清楚的导航和主区,多个导航区域可区分;跳到主区不能落到被粘性壳遮住或已移除的目标。普通页面导航按自然 Tab、独立展开;真正的用户菜单遵循既有菜单键盘。在菜单内选择新页面后,由导航契约安排新任务的焦点;取消时回到有效触发器,外部点击不无故把焦点拉回头像。当前已在有效主区的用户,不因徽标/身份图刷新而被抢焦点。

窄屏把次要入口移入溢出时,保持同一动作身份、范围及可达名称,不产生两份同时可操作的副本,也不在壳中复制页面的 primary。隐藏当前焦点入口前安排有效的后继;长账户/范围名允许识别当前上下文,不能只剩无说明的头像。原生平台复用本平台的导航栏、账户面板和返回约定;全局快捷键/区域切换键不是默认的跨端承诺。响应式若改成模态面板,只按 CMP-LAYER-RESP 处理。

证据:SAP Shell Bar、User Menu、Shell Search 只有 D 级目录证据;APG 正文区分真正的菜单与普通导航,示例不等于生产兼容保证。账户切换、旧回执与跨窗口边界是 YUDS 推导。APG Menu Button · APG Disclosure Navigation

2.4 组合夹具(全部运行未执行)

机器可读的前置、动作、断言与禁止事件见本组夹具。来源等级及读取边界见本组来源;文档反审不代表真实平台或辅助技术通过。

B1-SHELL-N01 用户菜单与主区往返

  • 前置:S001/T001 的原始草稿未提交。
  • 动作:打开用户菜单;取消;通过主区路径继续编辑。
  • 预期:菜单键盘与语义匹配;草稿原样;焦点按关闭原因恢复;当前范围仍为 S001。
  • 禁止:打开菜单时提交草稿。

B1-SHELL-F01 范围切换失败

  • 前置:S001 当前有效,且测试期间持续授权;请求 S002。
  • 动作:在 NAV-01—05 的离开决策中选择继续切换 S002;S002 加载返回失败。
  • 预期:未显示 S002 已生效;明确保留仍获准的 S001 内容和范围;提供重试或继续 S001 的可达入口。
  • 禁止:S002 标头配 S001 正文;声称未经证实的回滚成功。

B1-SHELL-R01 会话失效与菜单缓存

  • 前置:全局搜索/用户菜单已打开;原范围的写入待回执。
  • 动作:会话失效;旧身份/建议响应返回;重新认证。
  • 预期:受限的身份/建议/徽标/播报被清除;执行前重新授权;旧写入归入原任务的真实状态。
  • 禁止:认证后自动重放意图;以菜单隐藏替代服务端授权。

B1-SHELL-L01 壳溢出与焦点迁移

  • 前置:长账户/范围名;焦点在即将溢出的入口上。
  • 动作:缩窄并放大;操作溢出项;跳到主内容。
  • 预期:可识别账户和范围;焦点到有效后继;同一入口只有一个可操作实例;主区目标不被壳完全遮挡。
  • 禁止:复制局部任务的 primary;标题只剩无名称的头像。

B1-SHELL-V01 连续切换与迟到结果

  • 前置:S001→S002 的离开确认已显示。
  • 动作:请求 S003,但保持已显示的 S002 决策目标不变;明确选择继续切换 S002,并令 S002 读取成功;返回旧 S001 的读取与已发送写入的回执。
  • 预期:最终当前范围唯一为 S002;S003 不自动执行;确认目标未被偷换;旧读取不污染 S002;原写入回执只在当前许可披露的范围内归原任务核查,不在新范围展开受限字段。
  • 禁止:自动排队执行未确认的切换;新范围恢复旧账户的草稿。

B1-SHELL-C01 账户切换和多窗口旧回执隔离

  • 前置:账户 A(授权代次 a1)与账户 B(授权代次 b1)有同名的 R001,但互无读取权限;A 在窗口 1 有读取 r 与写入 w 待返回,w 的结果含仅 A 可读的字段;窗口 2 处于 A;宿主的跨窗口失效同步能力已登记。
  • 动作:窗口 1 完成明确获准的 A→B 切换;将 A 的 r 和含受限详情的 w 分别迟到送达窗口 1;窗口 2 收到宿主已支持的身份失效信号并核验;另测离线、未收到信号的情况。
  • 预期:窗口 1 只有 B 的身份/建议/草稿/通知/资源内容;a1 的响应不能匹配 b1 的同名 R001;A 的写入回执不向 B 披露受限字段;旧任务仅在当前允许披露的范围内核查;不迁移旧写任务的所有权,不重发 w;窗口 2 按实际能力核验;离线同步结果记录为未保证。
  • 禁止:声称切换取消了已发写入;将 A 的受限结果缓存为 B 的数据;宣称未实现的全窗口实时同步。

B1-SHELL-F02 切换等待时原范围失效

  • 前置:S001 当前有效;S002 的请求在等待中。
  • 动作:接受切换 S002;等待时撤回 S001 的读权限;S002 返回失败。
  • 预期:S001 的受限内容被清理;S002 未伪装生效;安全说明及实际可用的恢复入口可达。
  • 禁止:S002 标头配 S001 正文;声称未经证实的回滚成功。

3.1 目标与结构

链接定位资源、锚点或可分享的路由,按钮请求动作。结构由可见文字、必要的目标类型、外部/新窗口/下载说明及焦点构成。链接需要真实获准的目标;用空 href 或 javascript 占位再模拟按钮,会破坏复制地址和打开新页。下载是获取既定资源,生成导出任务是动作;两者可以串联,但状态和用户意图分别记录。

数据包括稳定资源 ID、获准的 URL 或路由、可披露名称、打开方式及目标状态;URL 不能把访问密钥夹带到普通显示/日志中,权限受限的资源不能仅靠隐藏按钮保护。界面不把当前会过期的签名链接当作永久可分享地址;提供复制链接时,明确它是稳定路由还是短期下载链接,并先核验权限。禁止因读屏名称/tooltip 仍缓存旧地址而泄漏已撤权的内容。

3.2 输入、返回与故障

Web 优先使用带 href 的原生 a,保留浏览器的复制地址、修饰键新标签和上下文菜单;Enter 导航,Space 不伪装成按钮激活。打开新窗口须有可理解的提示;用户自行用修饰键打开时,也不得被脚本强行改回原窗口。指针拖选文字不执行导航。SPA 的同页/路由导航需要正确更新标题、当前位置和合理焦点;异步路由结果只有仍属于当前导航意图时才可显示,不把迟到的页面抢回来。

不支持访问但允许披露的目标,可以用静态说明替代;若保留入口来解释原因,使用明确的帮助动作,不造一个假的可用链接。目标删除、撤权、网络失败三者不同,错误页提供不泄漏信息的返回或替代入口。浏览器前进后退与应用内返回保留有效的查询/位置,不重放写操作。长 URL/译名可换行或以有意义的短名呈现,机器地址保持逻辑方向;目的地名称不能全靠通用的外链图标表达。

平台适配:原生应用按系统深链和浏览器打开机制处理,仍保持意图、权限和返回路径;不能声称 Web 的 href/快捷键就是各原生端的 API。外部应用未安装、下载被阻止及链接过期时提供真实说明,不假称已打开或已保存文件。

来源:APG Link(2026-10-19 正文读取)支持使用真实链接及原生行为优先;过期授权、SPA 意图与下载的区分为 YUDS 推导。

3.3 精确夹具(全部未执行)

  • PRM-LINK-F01:R-001 有真实的详情路由;分别用键盘 Enter 与浏览器新标签打开。预期两者指向同一资源,保留浏览器语义,不触发写动作。
  • PRM-LINK-F02:文字样式的“保存”实际发送写请求;语义检查预期为 button,不用 a 模拟保存。
  • PRM-LINK-F03:复制的短期下载链接已过期;预期不能提示永久分享成功,给出更新/重新获取的真实入口,秘密不进入普通日志。
  • PRM-LINK-F04:导航 A 未完成,随后 B 成功;A 迟到。预期仍为 B,标题、焦点、当前位置一致,不被 A 抢回。
  • PRM-LINK-F05:私有的 R-002 撤权后被访问;预期无私有标题/计数泄漏,解释可披露的状态并提供安全返回;旧 tooltip/复制入口不暴露地址。
  • PRM-LINK-F06:长 RTL 文字与机器 URL 混排,触控拖选;预期地址顺序正确、全文可获取,选择文字不跳转,外部目标提示可读。

来源和证据限制见本组来源。

验收:覆盖复制链接、返回原位置、跳转失败、长链接名、目标不存在及同页锚点焦点。

CMP-20 基线正常夹具

打开合同 A 再返回 → 恢复有效的筛选位置。

CMP-20 基线失败夹具

A 的链接失效 → 说明不可用并返回原列表,不显示无权标题。

4. CMP-21 面包屑

用途是当前资源的稳定层级定位,不表示访问历史、任务步骤、当前筛选或浏览器 Back。结构为有名称的导航地标、有序路径、父级链接、装饰性分隔、唯一的当前项,以及中间路径的披露入口。输入是允许披露的有序祖先 ID/标签/目标与当前 ID;输出为父级导航意图及折叠展开意图。当前项在本候选中用文本,并可标 aria-current="page";若必须保留链接,则必须声明当前页,禁止重复“当前位置”项。APG 支持命名的导航地标及当前页声明,分隔不承担可访问名称。

折叠是布局状态,不改变层级。候选做法:空间不足时保留根、可辨识的当前项和“显示上级路径”按钮,中间项在有序链接列表中披露;默认采用普通披露+链接语义,不为了省空间改成菜单键位。展开后按钮保留焦点,Tab 进入父链接;Escape 关闭披露并回到按钮。未打开的折叠链接不留隐藏的 Tab 停靠点;展开后不在主路径和浮层中各留一个相同的可交互副本。需要标准菜单模型的实例必须单独声明,并按完整菜单验收。

当前项、键盘焦点、路径加载、披露开闭和父项可用性分别记录。当前名称仍未知时显示诚实的加载占位,不沿用上一个对象的名称。父级跳转失败时保持原来的当前路径/内容,并提供可恢复的说明;成功后由路由所有者一次性更新标题、内容和当前页。无权祖先用产品批准的安全省略方式,不保留可猜测的 ID/工具提示;不能虚构一个可导航的“受限节点”。同名父级用允许披露的层级说明区分。

实时折叠时,若持有焦点的父链接将被隐藏,先把焦点转到披露按钮并保留父级 ID;再次展开可恢复该链接。展开列表正在使用时,优先延后不必要的重排;当前页重命名时更新文本,但保留 ID 和焦点。RTL 下分隔方向与层级匹配,完整路径不反向成为“当前→根”的 DOM 顺序;翻译后的长名称可换行或在披露列表中完整查看,当前身份不能只剩省略号。触控可点击披露,不依靠悬浮标题。

组合:独立的“返回结果”保存来路与筛选,不插入父路径;面包屑不与侧边导航共同拥有两套当前路由。离开保护由同一导航仲裁。

精确夹具(运行未执行):

  • NAV-B1:根库 L0 → 集合 G1“集合” → 子集 G2“集合” → 记录 R-01;在 320 CSS px 下折叠 G1/G2,点击“显示上级路径”后按顺序读出两个带层级说明的链接,只有 R-01 是当前页;选择 G1 只产生 G1 导航,而不是 G2。
  • NAV-B2:焦点在 G2 时缩窄导致折叠,焦点先落到披露按钮;展开后恢复 G2 的身份,导航 0 次。改名为“用于跨语言可访问性验证的记录 R-01”后仍关联 R-01,当前文本可读。
  • NAV-B3:父级 G1 请求失败,仍显示 R-01 的内容/当前项;随后 P2 禁止披露 G1,路径不残留旧名字/目标/隐藏链接,安全返回可达。失败、无权、加载不得都渲染成空面包屑。
  • NAV-B4:RTL+混排 R-01+200% 文字,以键盘和触控展开;辅助技术的读序仍从根到当前,分隔不逐个通告,隐藏的父项不能获得焦点。

来源和证据限制见本组来源。

例:资产 → 项目 A → 合同 B;“返回待办”负责回到来路,面包屑负责层级定位。

验收:覆盖多入口、同名对象、窄空间、父级无权限和动态对象改名。

CMP-21 基线正常夹具

从待办进入合同 B → 面包屑仍表达稳定层级,另有“返回待办”。

CMP-21 基线失败夹具

父级撤权 → 链接无泄漏地拒绝,并提供安全路径。

5. CMP-22 标签页

5.1 用途、结构与值

标签切换同一上下文中的同级面板;不同的工作对象/站点页面通常用导航链接,不能仅因视觉上是下划线就使用 tab。结构为有名称的 tablist、稳定的 tab、唯一的选中状态、与之关联的 tabpanel,以及可选、非必需的数量/关闭入口。Icon Tab Bar 的图标、计数、嵌套能力不能从目录名字照搬成新的 YUDS 组件。

输入分别记录对象 ID、selectedPanelId、focusedTabId、激活模式、每个面板的请求身份/草稿及可用性。输出为聚焦、激活请求、关闭请求;离开保护通过前不提交选中变化。计数分为已知值/未知/加载/失败,不能以 0 代表未知,也不能自动隐藏有意义的 0。

APG 基线:一个 Tab 入口进入活动标签,横向用左右键移动焦点;手动模式下 Enter/Space 激活,竖向用上下键;面板关联和选中状态可被 AT 读取。只有内容无明显延迟时才适合自动激活。没有合适的可聚焦起始内容的面板,需要可进入阅读的焦点路径。对于可能读网络、产生昂贵加载或触发草稿保护的场景,YUDS 选择手动模式,不在用户用箭头遍历时反复弹出确认。

5.2 异步、选中与失败

自动模式须在实例进入前固定,基于真实可即时呈现的面板,而不是假定缓存永远命中;若无法满足,应从一开始就选手动模式,不在同一遍历途中无声地改变键位。手动模式下方向键只改 focusedTabId,旧面板继续显示;确认激活后 selectedPanelId 改为目标,目标 panel 显示加载、错误、内容三者之一,不能目标标签已选中却仍放着无标识的旧内容。

切换到 R-01 的 P2(请求 Q2)后又切到 P3(请求 Q3),即使 Q2 晚到,也只能更新仍获授权的 P2 缓存,不能覆盖 P3;缓存归属至少包含对象 ID、面板 ID、权限版本与请求序列。若切到 R-02,任何 R-01 的响应都不得拼入 R-02 的标题。面板失败时局部显示重试,保留所属标签;重试是读取,不改变选择。后台完成不把焦点从用户正在编辑的字段拉回标签。数量刷新不改变标签 ID。

允许关闭时,先处理草稿;关闭当前项时选择下一个合法项,没有则选前一项,焦点与选中按明确的关闭流程同步;关闭非当前项不改变当前内容;手动激活模式下,若该非当前项正持有焦点,焦点移到相邻的合法标签(没有则移到当前标签),仅移动焦点,不自动激活其面板。没有剩余项时进入已定义的空态/创建入口,不把焦点丢到 body。禁用标签不能激活,其原因可被触控/AT 发现;不可披露的则移除。当前面板被撤权时,优先清除数据和标签,再选择安全面板;没有合法面板时落到安全标题/离开入口,不因保护草稿而保留敏感面板。

5.3 溢出、长文本与组合

优先采用一个可滚动、可通过键盘自动露出焦点项的真实 tablist,或明确的“更多面板”披露选择器;不要多行环绕后让左右键的顺序无法理解。溢出按钮本身不是假标签,不设 aria-selected。候选溢出策略:溢出列表只是激活入口,选择隐藏的面板后,先使其稳定的 tab 实体在 tablist 内可见,再完成激活并聚焦该 tab。这里只改变呈现的可见集合或滚动位置,不把所选项任意移到首位,也不改变面板的逻辑顺序、DOM/AT 顺序或既定的箭头遍历顺序;若实现无法同时维持所选模式的完整焦点语义,改用可滚动的完整 tablist,不能以重排冒充适配。避免出现“选中了隐藏的 tab,但 tablist 中没有可见的当前项”。“更多”列表若用菜单,完整遵守菜单契约;若用普通链接/按钮列表,采用自然 Tab,不混用键位。

实时缩窄要把焦点 tab 移走时,优先保留焦点/选中的 tab 可见,让其他项溢出;实在无法保留,则转到“更多”并记忆其 ID,打开后可找到该项。菜单开着时扩宽,不搬走正在使用的项,关闭后才稳定重排。同一 panel 不挂两个同 ID 的标签;对象/草稿不因搬迁而重建。极长标签采用可读的完整文本路径与水平/纵向替代,不仅依靠 Tooltip;RTL 的物理左右、视觉排序及 panel 关系必须一起测试。触控滑动可作辅助,但显式点击/“更多”入口始终可用,不能只靠隐藏的横向手势。

组合:标签内部的工具栏只服务其面板;标签切换不创造另一个主提交上下文;页面同一草稿若跨多个面板,仍只有一个主保存。错误数量/通知徽标只是状态,不能把标签名称改到无法识别。嵌套的 tablist 必须各有唯一名称,默认优先采用扁平的内容结构。

5.4 精确中性夹具(全部运行未执行)

  • NAV-P1:R-01 有“概览 P1”“项目 P2”“历史 P3”,手动模式,选中 P1。按 Right 到 P2:selected 仍为 P1,读取 0 次;按 Enter 后 P2 选中并显示 P2 的加载,发出 Q2 一次;失败时显示 P2 的错误而不是 P1 的旧内容,焦点仍在标签上。
  • NAV-P2:Q2 未返回时激活 P3,发出 Q3;Q3 先成功、Q2 后成功:当前仍为 P3,内容仅属于 P3;再切到 R-02,R-01 的迟到数据不出现。用户已在 P3 的字段中编辑时,回执不抢焦点。
  • NAV-P3:P2 有草稿,切到 P3 时触发统一保护;取消后地址/selected/content 仍为 P2。P2 随后被撤权,无论草稿如何都立即移除受限内容,落到 P1;旧的 P2 响应不能恢复其标签或缓存。
  • NAV-P4:6 个稳定的面板 ID,当前 P5,焦点 P6,宽度 640→240 CSS px;选中/焦点项优先可见,无法保留时焦点落到“更多”,且 P6 可恢复。选择溢出的 P4 后,P4 实体可见、选中并获得焦点,P4 的 panel 关联唯一,原 P1 至 P6 的逻辑顺序及既定箭头顺序保持不变,执行的读取不重复;无法保持时改为完整的可滚动 tablist,并单独验收。
  • NAV-P5:即时本地面板使用自动模式,方向键同步选中/展示,无网络请求;手动模式的慢面板另测,不能用该结果证明慢面板采用自动模式合格。RTL+长中文/德文+200% 文字,逐项用键盘与触控到达;读屏明确读出组名、选中、面板关联及未知计数。
  • NAV-P6:手动模式,当前面板 A,焦点在非当前标签 B;关闭 B。预期内容仍为 A,焦点到相邻的合法标签 C(无相邻则到 A),C 不自动激活,面板激活事件 0 次、读取请求 0 次。

来源和证据限制见本组来源。

例:附件面板加载失败时,仍显示合同 A 和“附件”的当前状态,可重试,且不会清掉付款计划草稿。

验收:覆盖慢网络、焦点与选中分离、动态权限、面板关闭、返回、数量更新及长标签。

CMP-22 基线正常夹具

合同 A 的附件标签 → 显式激活 → 附件面板对应 A。

CMP-22 基线失败夹具

附件加载失败 → A 的标题与附件当前态保留,可重试,且付款草稿不丢。

6. CMP-23 侧边导航

用途为全局或一个对象内的目的地定位;字段选择、目录树编辑、批量勾选不属于该模式。结构:命名的 nav、分组标题、列表、真实链接、独立的披露按钮、当前目的地和可选的折叠入口。父节点既能导航又能展开时,使用相邻但独立的链接与按钮,后者的名称包含所属组;一个点击区域不可同时触发导航和展开。APG 披露导航示例明确普通导航不需要 menu/menubar 角色,移动端与辅助技术的支持必须测试。

值:currentDestinationId、expandedGroupIds、presentationMode、允许披露的节点与节点加载状态是相互独立的候选信息,不是正式的属性命名。导航输出目标意图,展开输出期望的展开集合;点击展开不能改变地址或当前标识。只在真实的当前链接上标 aria-current;祖先“包含当前位置”是辅助说明/视觉线索,不能把每个展开的父级都标为 current。任意组都可展开而不含当前页;用户收起当前祖先不等于离开当前页面。

键盘采用自然 Tab/Shift+Tab,Enter 跟随链接,Enter/Space 操作披露;本候选不增加树式方向键。折叠的子树不在 Tab 顺序/可访问树内;若收起时焦点在后代上,先回到对应的披露按钮。提供跳到主要内容的入口。当前项的状态通告与导航后的内容焦点由路由统一安排,不能侧栏自动聚焦与页面标题自动聚焦互相争抢。

窄屏呈现必须与 CMP-LAYER-RESP 一致:优先维持既定的交互类型;若确需从非模态侧栏转换为模态抽屉,应声明并实现显式的转换策略,完成背景隔离、关闭及焦点返回,不能只因断点就偷偷改变模态语义。普通的桌面侧栏不永久标为模态。仅包含导航的可见区收起,不等于退出主体任务;若该区域承载输入/独立任务,且关闭意味着退出,则必须走统一的离开保护,断点不能丢失输入或绕过保护。转换时记录目标 ID:若焦点在侧栏且新模式已关闭,焦点落到可见的导航打开按钮;若新抽屉正在打开,则进入对应项目;焦点本来在主体时,不因断点变化自动打开抽屉或抢焦点。图标收缩模式仍有可发现的文字展开路径,图标名称对 AT 可用,触控无需 hover。

分支加载失败、确实无子项、无权查看子项三者不同;失败时保留可重试入口及组身份,不伪造“无内容”。当前路由被撤权时,马上清理受限的导航/主体/缓存,再进入产品指定的安全位置;只是非当前分组被撤权时,不强制用户离开合法的当前页面。旧请求按权限版本丢弃,不重现隐藏的分支。禁用的可披露目标给出安全的原因,并实际阻止链接激活;不可披露的目标隐藏。长翻译名称换行时保持行的命中区域完整,缩进不无限蚕食文字;深层任务若需要树的专业能力,应转入独立完整的树契约,而不只是加 tree 角色。

组合:全局与对象内的两块导航各有名称;当前状态可各自表示自身范围,但不能混为多个全局当前页。展开偏好可保存,恢复时须经当前权限过滤;不恢复旧对象的选中集合。RTL 下缩进/展开图标采用逻辑方向,真实阅读顺序仍为层级顺序。

精确夹具(运行未执行):

  • NAV-S1:组 A 展开,包含 A1、A2;组 B 展开,包含 B1;当前为 A2。关闭 A 组只改变 expanded,当前仍为 A2,B 组不能因展开而显示 current;焦点若在 A2,先回到 A 的披露按钮,主体保持 A2。
  • NAV-S2:当前 A2 且焦点在 A2,容器 1000→360 CSS px 进入关闭的抽屉模式:按已声明且经验证的显式转换策略,焦点落到导航按钮;打开后定位到 A2;Escape 关闭抽屉并回到按钮,背景无隐形焦点。若产品不能完成类型转换,则保持原非模态类型重排;如侧栏含未保存任务,另测统一的退出保护,缩窄不能丢失输入。另测焦点在主体时同样缩窄,不自动打开抽屉。
  • NAV-S3:B 分支读取失败时显示重试,不报“无工作区”;P2 撤销 A2,且旧的 A 请求返回,A2 及其敏感标签不得复活,主体进入安全首页,并有允许披露的说明。
  • NAV-S4:五层长翻译标签+RTL+200% 文字,披露按钮与链接的触控命中区不重叠;Tab 跳过关闭的子树,当前祖先的辅助说明可读,但不出现多重 aria-current。

来源和证据限制见本组来源。

失败:菜单加载失败与没有可用工作区不同;权限收回后清除受限缓存和当前入口,转到安全可用的位置。例:在合同 A 中切至资产列表时显示新任务的上下文,不沿用合同 A 的批量选中。

验收覆盖窄窗口抽屉化、展开状态恢复、键盘跳过重复导航、当前项长名称及权限中途变化。视觉折叠偏好不影响有权入口的可发现性。

CMP-23 基线正常夹具

展开资产组 → 只展开;点击列表 → 切换工作对象。

CMP-23 基线失败夹具

权限撤回 → 清理受限入口与缓存,转到安全位置,并说明可披露的原因。

7. CMP-24 / PAG-DATA 分页

7.1 用途、非用途与能力入口

分页的用途是浏览同一已明确查询的结果片段,不是表单步骤、任务进度、章节层级或相邻文档页链接。本节是对现有 CMP-24 的深化,不能仅因为显示了两个箭头就宣称支持所有分页。服务的实际能力决定可呈现的控制,界面不编造跳页、倒退、末页、精确总数或游标恢复。

服务已证实的能力 可呈现的控制/说明 不能由此推出
可随机定位,且有可靠的总量/页边界 当前真实范围、前后页、可用页码/跳页、经支持的每页量 总量永不变化;每页结果属于同一不变快照
可随机定位,但总量未知 真实的当前定位与实际支持的前后/跳转入口;说明总量未知 猜末页、猜页数、把最后一个已见页叫作终点
只支持后继游标 已确认片段、真实的后继读取入口、未知或有依据的总量 任意页码/末页、可逆游标、计算出来的“上一页”
有效的历史页/前向游标缓存可返回 仅在查询/排序/授权/版本仍兼容时提供真实的返回路径 已访问页永久有效;跨工作区复用游标
明确的增量加载 已加载集合、加载更多、已确认的终点/失败 已加载总数就是查询总数;滚动会自动完成全部检索

精确总量、估算、下界、未知分别标注;“至少 n 条”不能推导出精确页数。即使总数已知,也不自动意味着能够随机跳页。连续加载的计数只计已确认、去重后属于当前集合的实际成员;重复 ID 若只是边界重叠,须按已声明的协议处理,不能用同一 ID 覆盖不同版本后假称快照一致。游标内部值不必向用户暴露,但读出的范围和返回能力必须真实。

7.2 结构、数据和状态

有名称的分页区关联结果区,包含当前已确认范围、加载目标/状态、前后或“更多”入口、真实可支持的页码/每页量,以及计数可信度。按钮名称指出对象范围/方向;链接用于可验证的导航目标,按钮用于局部读取,不能为了样式把按钮伪装成有真实地址的链接。多个分页实例要有可区分的名称;同一表格的顶部和底部若同时出现分页,须共享一个状态,不形成相互矛盾的当前页。

分开当前页 R 与目标请求页 P。用户请求下一页时,仅 P 变为读取中;成功且身份仍匹配后,一次性更新 R 的行、页标识、范围、计数/排序来源与页父范围 E。失败时保留 R 的原页,并说明未切换;不能先把页码改成 2,却仍读第 1 页。没有 R 时属于初次失败,无权时属于受限,均不展示空页或“已到末页”。

下一页处于 pending 时,本稿默认不接收依赖未确认游标的重复“下一页”;说明正在加载,保留退出与其他可用工作。若支持随机页且允许用户更改目标,以最新的明确目标建立新的读取代次,不能把两个回包拼接起来。按范围请求失败后重试读取,不会清空 S;已提交的写任务 W 不跟着分页重试。停留在旧页不等于新写入没有发生。

7.3 与筛选、排序、选择及编辑的组合

  • 新条件/排序成为 A 后,旧分页目标及旧父范围 E 失效,使用新查询的真实起点;每页量能否沿用,由服务/产品能力决定。D 尚未应用时,分页仍只作用于 A/R,不偷用 D。若 A 正在切换而 R 仍是旧查询,默认暂停旧 R 的范围变更/父选择,保持旧数据可读,并给出标记与原因;要返回旧查询须由用户明确选择,不能点击“下一页”就悄悄退回旧 A。
  • 每页量改变不代表已经切页。只有可用稳定的对象锚点重新定位时,才尝试保留阅读位置;没有这项服务能力时,明确回到新起点,不把前端算出的页码当作服务器承诺。每页大小的值/可选项由实际实现批准,本文不指定。
  • S 中的显式 ID 可跨页保留,并说明哪些项不在当前结果中;E 只属于新的 R 页,不能沿用旧页的 checkbox 状态。全查询 S 绑定原查询/版本,换查询后须明确保留原范围或重新选择;这不是一个让范围随分页更新的布尔状态。执行前重新校验真实范围,待解析时不能以旧总数预览。
  • 未提交的数据草稿按对象/字段/版本保留,并有返回入口;如果能力不足,沿用 NAV 的单一离开保护。分页不能触发失焦写入,输入法结束不充当隐式保存。读写任务分开,排序或分页的取消不撤销已发出的 W。
  • 删除末页最后一条记录后,删除事实与新页读取分别确认。删除已确认而新页读取失败时,不能恢复一条“仍存在”的假记录,也不能宣称已到前一页;显示已删除、列表待更新/读取失败,以及合法的重试路径。确认了可用的目标页并成功读取后,才更换当前位置。空的过期页不等于整个查询零结果。
  • 游标失效时应说明需要重新读取/定位;只有当前范围仍有效且协议允许时,才从真实起点重新查询。不以旧游标跨授权代次、查询、排序或页大小猜测恢复。接口没有稳定的快照/定位能力时明确说明这一限制,不承诺刷新后回到同一行。

7.4 焦点、键盘、增长与平台

普通分页控件按自然 Tab/Shift+Tab 移动;按钮的 Enter/Space 只发出本次读取意图,不提交上方的筛选/表格表单。页码编辑仅在明确接受后才发起请求,文本输入和 IME 不被全页快捷键抢走。页码/范围可读,当前位置不靠颜色表达。省略号若只是间隔,则不可激活;若用于打开跳页选择,须有真实的按钮名称及完整的子控件合同。

局部加载后默认保留在触发处,不强制跳到表首;同时提供有名称的结果入口,并适度通告新范围。触发器将消失或变得不可聚焦时,事先在同一分页区安排可见的安全目标或结果状态,焦点不落到 body;用户已移开焦点时不拉回。真实的整页导航沿用页面导航的焦点模型,不能声称与局部读取完全一致。“加载更多”可让用户继续到新增区域,同时始终有跳过长列表、到达分页/页尾的路径;无穷增量不能把下一个任务永远推远。

窄屏可减少页码密度,或把定位入口放进可达的面板,但须保留真实的当前范围、前后/更多,以及加载/失败说明,不能缩成纯粹无名称的箭头。长数字、翻译和 RTL 下保留范围意义与方向语义,但不反转记录序号本身。外围分页不继承表体的二维重排例外。iOS/iPadOS、Android、HarmonyOS 及桌面原生端使用平台语义/辅助操作,并验证返回、软键盘和焦点;此处没有关于原生 API、可用版本或运行通过的声明。

7.5 PAG-DATA 文档夹具(全部未执行)

ID/类别 固定前置与事件 可观察预期与失败判据
PAG-DATA-N 正常页码 已证实可随机页、当前页 1 及精确总量 → 点击下一页,延迟后成功 pending 时仍为页 1/旧范围;成功后才同步更新行、页、范围、计数来源和 E;读取意图 1
PAG-DATA-F 失败/乱序 页 1 → 请求页 2 失败;允许随机跳页的实例又请求页 3,页 3 先成功、页 2 后到 失败不假切页;页 3 成功后,页 2 不改动行/页/状态;S 不清空,业务写入 0
PAG-DATA-R 撤权 旧授权下的游标在途,且旧行含受限字段 → 撤权后重试/返回缓存页 旧游标/回包/缓存不能恢复受限数据或继续读取;范围待核查,安全焦点可达
PAG-DATA-G 增长 长范围与翻译、RTL、放大/窄屏,页码折叠,且下一页触发器将消失 实际范围和可用方向清楚,存在可点击的替代入口;焦点有安全后继,不抢外部焦点;未宣称表体例外覆盖分页
PAG-DATA-U 未知总量 后继游标可用,已加载 5 条,总数未知,服务未证实终点 → 继续读取 只报告真实已加载的条数,不能写“共 5 条”或“最后一页”;读取失败时总数仍未知,不伪造随机页或上一页能力
PAG-DATA-Q 查询代次 A=Q1/R=Q1 页 2,D 改为 Q2 但未应用;先在 Q1 翻页,再应用 Q2,Q1 的后继回包迟到 未应用时按 Q1;应用后旧 P/E 失效,从新起点读取;旧回包不加进 Q2,跨查询的 S 保持明示的原范围
PAG-DATA-D 删除末页 末页唯一一条 R-003 删除已确认;请求目标有效页失败 R-003 不假复活,未宣称换页成功;显示真实的删除事实和列表更新失败;重试只重读,不重复删除
PAG-DATA-Z 改大小/锚点 正在读 R-002,服务不支持按 ID 定位;改每页量,同时保留 R-001 的草稿 不编造可保留的页码/锚点,按声明回到新起点;草稿仍属 R-001 且可找到,重排与分页引起的保存为 0,必要的离开保护只走一次

来源界限:Carbon Pagination 仅支持分页用途、范围/控制结构的参照;不迁入其尺寸、固定位置或选择器键位。Geist Pagination 正文定义的是相邻内容页导航,并明确与数据结果分页区分,因此不作为页码/游标能力的证据。游标、计数可信度、读取代次和恢复,均为 YUDS 依据现有主档提出的通用组合建议。

来源与证据边界见本组来源。

解剖:当前范围、前后页控制、可选页码、每页数量与总量可信度。页码、游标分页与无限滚动是不同的机制,界面只呈现服务端真实支持的能力。

行为:点击下一页 → 加载目标页 → 成功后更新范围。请求失败时保留当前页内容并说明未切换,不能先显示第 3 页却仍放着第 2 页的记录。总数未知时使用“已显示…/下一页”,不猜总页数;末页标识由可靠的返回状态决定。

筛选变化通常回到首个可用页或新游标,已选范围按批量模式处理。每页数量变化后,使用稳定的记录身份尽量保留位置;失效游标可重新查询,并说明列表已更新。排序必须稳定,服务端至少要有可定义的次级次序,避免翻页时重复或遗漏。

键盘:所有分页动作都有明确名称,如“下一页合同”;加载完成后适度通告新范围。焦点通常保留在触发器上,除非任务和辅助技术测试证明需要进入结果标题。失效页按钮的原因和边界可理解。

例:共 122 项,每页 50 项,显示“当前显示 51–100 项”;勾选当前页不等于选中全部 122 项。

验收:覆盖删除末页最后一项、总数变化、慢请求乱序、未知总量、焦点位置以及跨页选择的准确性。

CMP-24 基线正常夹具

第 1 页 → 下一页确认 → 范围更新为第 2 页。

CMP-24 基线失败夹具

第 2 页加载失败 → 仍显示第 1 页与失败说明,不混用新页码与旧内容。

8. CMP-25 工具栏与溢出

8.1 用途、结构与值

工具栏组织同一对象/范围的相关控件,不是页面上任意一排按钮的统称。先选择普通的自然 Tab 组或完整的复合工具栏;不能只做半套 roving。结构为用途名、范围文本、控件组、可选分隔、溢出入口;位于头部、表格或页脚,不构成新的行为角色。输入包括稳定的控件集合、当前范围、可用性、布局优先级候选;输出仍是各子控件自己的事件,外加溢出开闭与焦点迁移记录。可见范围不参与命令循环,但必须能被读屏读到。

APG 基线:复合工具栏采用一个 Tab 停靠点,由方向键在内部移动,并给出组名;避免放入使用同轴方向键编辑的控件。禁用项是否可聚焦须统一选择,不能依赖样式。YUDS 本候选:复合条首次进入时落在首个可用项,返回时记住仍可用的最后一个身份;若强调禁用项的可发现性,则采用可聚焦的 aria-disabled 并实际阻止执行,不能与原生不可聚焦的 disabled 随意交替使用。

8.2 布局、焦点与状态

自然 Tab 组仍逐个控件进入,不能因窄屏临时变成 roving;复合条使用同一导航轴,菜单内部接管方向键,Escape 回到该触发器。文本框/滑块的编辑键优先;存在无法消除的冲突时,选择自然 Tab 组,或把控件移出复合条。方向、环绕、Home/End 属于实现映射记录,不能随控件数量随机变化。

溢出按预先声明的稳定优先级移入,保持原有的相对顺序与分组,不因标签翻译而重排业务重要度。当前范围、主任务说明不能藏进“更多”。不得把同一任务的主操作复制成主栏与菜单中两个同时可用的入口,也不得借溢出创建第二个主操作。控件变为菜单命令时须语义等价;复杂字段移至命名的配置面板,值保留,不伪装成命令。

实时缩窄时:优先让焦点项暂时留在可见区;必须移入已关闭的溢出时,将焦点转到“更多操作”,保存待恢复控件的身份,但不自动执行或打开。用户随后打开溢出时,聚焦到迁入的项。若菜单已打开,焦点项保持在菜单中直到菜单关闭,再完成扩展布局的重排,避免突然把它搬回主栏。关闭后按关闭原因决定焦点:

  • 仅 Escape/显式取消恢复到触发器:若“更多”仍存在,返回“更多”;若“更多”因扩宽而消失,回到原控件的新实例。
  • Tab 保留正常的前后目标。
  • 外部点击保留点击目标。
  • 命令导航/打开对话框时,交由新任务接管。

关闭后的响应式重排不得覆盖这些既定的焦点结果。不得因延迟布局留下两个可同时激活的副本。

状态轴:普通/批量范围、聚焦/未聚焦、展开/关闭、可用/禁用/隐藏、忙碌/结果未知和溢出位置彼此独立。远端回执按请求 ID 更新,不能把原项的忙碌状态落到同一索引上的新项。撤权遵循共同规则;取消选择替换整条工具栏时,焦点移到仍存在的选择控制或普通工具栏的首个合适入口,并说明范围变化。

8.3 触控、长文本与组合

所有移入溢出的操作都可通过显式的“更多”找到,点击区域不能因密度压缩而互相覆盖。RTL 按逻辑顺序排列,数字范围仍可辨认。长标签先换行或移入溢出,不缩成多个同名图标;缩放和软键盘弹出时,固定页脚不得遮盖焦点、错误或最后一行。与表格组合时,行选择值由表格拥有,工具栏只消费准确的快照,不能把可见行数量当作全部选中数量。

8.4 精确中性夹具(全部运行未执行)

  • NAV-T1:R 集合已选 5 项,其中 2 项不在当前页;复合条为“筛选”“列设置”“导出”,焦点在“导出”。容器 640→280 CSS px(仅为测试输入,不是设计尺寸);“导出”进入已关闭的溢出,焦点落到“更多”,意图 0;打开溢出后聚焦“导出”,执行快照仍为 5 项。
  • NAV-T2:溢出内的“导出”有焦点,容器 280→640:菜单关闭前焦点不突然转移到主栏;Escape 后焦点到同一“导出”控件或仍存在的“更多”,不落到 body;全程可激活的“导出”实例最多 1 个。
  • NAV-T3:导出请求 Q1 处理中,焦点已移到“筛选”;权限 P2 移除了导出,Q1 回执迟到:不回焦,不重建无权入口,显示允许披露的结果。结果未知时不重发。
  • NAV-T4:自然 Tab 组含文本搜索、滑块与“更多”,使用长德文标签/RTL/200% 文字:光标与滑块编辑不被工具栏截获;所有控件、选中范围及错误均可达;固定页脚不遮挡最后聚焦的项。须分别验证自然组与复合条,不能混在一起报一次通过。
  • NAV-T5:菜单打开后,分别执行 Escape、Tab、外部点击、命令打开对话框,同时容器扩宽、移除“更多”:预期仅 Escape 回到原控件实例,其余保留离开目标或新任务的焦点,不被重排抢回。

来源和证据限制见本组来源。

例:已选 8 项时,工具栏显示“8 项已选,含其他页 3 项”;取消选择后恢复普通操作,并将焦点放回合适的位置。

验收:覆盖横向/窄布局、菜单内外动作一致、禁用原因、动态插入、焦点记忆与输入框键位冲突。

CMP-25 基线正常夹具

已选 8 项,其中含别页 3 项 → 显示准确范围,并可导出。

CMP-25 基线失败夹具

取消选择,移除批量工具 → 焦点回到选中控制或普通工具,不留隐藏节点。

9. 组合验证与主档索引

未保存内容、权限变化、切换失败和服务端状态变化应有统一的流程,而不是每个导航组件各自弹出一套确认框。切换失败时留在原上下文;已成功切换后再发现部分数据失败,则在新上下文中局部反馈。判断依据是已确认的导航状态,而不是动画是否完成。

认证交接与安全返回统一沿用权限变化、并发修改与保存冲突中的 PAT-AUTH;壳只承载真实的身份入口,不自动重放原业务写入。

测试当前全部未执行。每个导航实例记录对象 ID、入口来源、返回状态、权限条件、键盘模型、加载失败与窄布局结果。官方来源核查于 2026-10-18。进一步的组合见数据表与交互网格契约;输入见输入组件:文本、结构化编辑与专用输入;选择见选择组件:值、范围与层级。

主档索引

本节仅提供追踪导航;完整契约及基线正常/失败夹具已归入同名的组件主节。CMP 编号只用于规范追踪,不是组件 API;用途、结构和变体见同名组件主节。输入/输出指可观察的信息与意图,不把意图当作业务完成。正常与失败夹具均按“前置条件 → 动作 → 预期”书写,实际平台执行全部未执行。键位为已注明的 Web 模型,原生端按本章平台映射另行验证;触控必须有显式可点的入口,不依赖悬浮或拖拽。

  • CMP-20 链接:本页「CMP-20 / PRM-LINK 链接」(第 3 节)
  • CMP-21 面包屑:本页「CMP-21 面包屑」(第 4 节)
  • CMP-22 标签页:本页「CMP-22 标签页」(第 5 节)
  • CMP-23 侧边导航:本页「CMP-23 侧边导航」(第 6 节)
  • CMP-24 分页:本页「CMP-24 / PAG-DATA 分页」(第 7 节)
  • CMP-25 工具栏:本页「CMP-25 工具栏与溢出」(第 8 节)