C3.14.2Back stack versus up navigation设计研究
返回栈语义与「上一级」语义不同
别名: 返回栈 · up vs back · 层级返回
概念解释
返回手势弹出的是访问历史栈上的上一帧:你从哪来,就回哪去,哪怕那一帧和当前页在信息架构里不是父子。导航栏上的“上一级”(up)则走向结构上的父级,不管你刚从搜索、通知还是深链跳进来。两者都叫“回去”,栈和树不是同一条路。手势若只实现其中一种、界面却暗示另一种,人会回到一个他们不认得的地方。
机制
栈忠于时间:A → 搜索结果 → 详情,返回详情应回到搜索结果。树忠于结构:详情的父级可能是某分类首页,从通知点进来的人按 up 会落到他们从未路过的分类。Android 长期把系统返回键绑在栈上,把工具栏左箭头绑在 up 上;iOS 的侧滑返回通常也走控制器栈,但栈可以被深链重置。Web 的 history.back 是栈,站点面包屑是树。手势因为不可见,用户无法在提交前分辨自己走的是哪一种,只能靠完成后的页面来事后学习。预测性返回若预览的是栈顶,却在松手时改走父级,预览本身在撒谎。
怎么研究
设计两条进路到达同一详情:从父级列表点入,从全局搜索或通知点入。请人用返回手势离开。记录落点是搜索/通知来源还是父级列表,以及口头预期。把工具栏 up 与手势 back 对照。深链冷启动(应用不在后台)要单列,因为栈可能只有一帧,返回会退出应用而不是回父级。
边界
线性向导没有树,栈和 up 重合。单页应用若把所有状态推入一个假栈,返回会在页内打转,树也走不通。有的产品故意让手势回父级,以避免回到已经过期的搜索会话,这是产品策略,必须在预览里写清楚,不能暗中改栈。
怎么落地
- 手势返回走历史栈;需要“到父级”时用可见的 up 或面包屑,不要让同一条侧滑有时弹栈有时跳树。
- 深链进入且栈底就是当前页时,返回应退出到系统桌面或上一个应用,不要虚构一个用户没来过的父级。
- 从通知打开详情再侧滑。应回到通知前的上下文(或退出应用),而不是跳到信息架构里的父分类。若预览卡片画的是父分类,预览与栈不一致。