E5.05.3breadcrumbs are not back设计
面包屑不能替代返回
别名: 面包屑不是返回 · up versus back · 父级≠上一页
概念解释
面包屑上的上一级是树上的父节点,返回是会话里的上一帧。面包屑不能替代返回(breadcrumbs are not back)是说这两条路落点不同,不能因为页面上已经有祖先链,就把返回从顶栏、系统手势或浏览器控件里拿掉。点父级是「往上爬一格」,点返回是「回到我刚才所在的那一页」,两者只有在用户刚好从父级走进来时才会碰巧重合。
机制
进入一页的路径经常不是父级。搜索、通知、外链、相关推荐、上一次未读完的另一个叶节点,都会让「上一页」和「父节点」分手。这时只提供面包屑,想离开的人被送去一个他并不来自的类目页,刚才的搜索结果、滚动位置和筛选全部丢掉。他会认为系统走错了,下一次改用系统返回——若系统返回也被产品拦截去父级,历史栈就被毁掉。
面包屑还经常缺当前页之前的那一跳:它不包含「搜索结果第 3 页」这种非树节点。返回必须覆盖这些不在树上的帧。即便用户是沿树走进来的,返回仍然有「逐步撤销」的语义(连按两次退两步),面包屑则是「跳到某个祖先」,一次可以跨多层。用面包屑冒充返回,会把跨层跳转做成唯一出口,撤销粒度消失。
边界
在严格的树浏览、且所有入口都被强制经过父级时,父级和上一页会经常重合,但只要存在搜索或深链,重合就被打破。向导式流程没有树,返回的是上一步,面包屑式的祖先链会误导成「可以跳步」。部分单页应用把返回实现成「总是去父级」,这是产品自己改写了历史语义,必须在可视返回控件上写清「回上一级」而不是沿用系统返回图标——即便如此,也不等于面包屑可以独自承担离开。没有历史栈的嵌入式 WebView 更需要显式返回,面包屑更补不上。
怎么落地
- 顶栏或系统级返回始终保留,语义是弹出历史;面包屑的每一段语义是跳到该祖先,两者同时存在、互不顶替。
- 不要把返回按钮的目标改写成父节点。需要「回上一级」时用单独的控件或面包屑自己的父级段,文案写成上一级的名字。
- 从非树入口进入时,返回应回到该入口(搜索结果、通知列表),不要被面包屑的父级截走。
- 验证:先搜索再进详情,分别点返回和点面包屑倒数第二段,两个落点必须不同——一个是搜索,一个是父类目。再测没有面包屑、只靠返回能否离开每一页;不能离开的页面就是把出口误绑在了祖先链上。