F1.08.2broken overlay anchor设计

锚定关系断裂时用户无法判断作用对象

别名: 锚点断裂 · orphaned popover · 无主浮层

概念解释

评论框从某条动态的「回复」长出来,用户随手一滚,那条动态滑出视口,评论框还钉在原来的屏幕坐标上,箭头指向一片空白。接下来打的字会交给谁,已经没有几何答案。锚点断裂(broken overlay anchor)是浮层还在、来源已经走掉或变形,指向关系变成空指针。

键盘顶起视口、筛选条件把列表重排、触发器所在的卡片被实时刷新替换,都会制造这种空指针。人不是看不懂浮层里的字段,是无法把字段绑回对象。

机制

锚定把「层」和「对象」做成一对几何约束:箭头命中来源、层跟随来源的屏幕矩形。约束的一端消失(来源滚出、卸载、尺寸变成零)时,另一端不会自动找到新对象,它只是停在过期坐标上。过期坐标常常碰巧靠近下一张卡片或下一个字段,于是出现错绑——评论发到了下面那条动态上。

滚动是最高发的断裂源,因为滚动改的就是来源的屏幕矩形,而许多浮层被做成 position: fixed,故意不跟着文档走。固定本是为了不被裁切,代价是与来源脱钩。

边界

模态对话框本来就不跟某个行内对象走,滚动下面的列表不应被解释成锚点断裂。来源仍在视口内、只是轻微位移时,层跟着微调属于锚定的维持,不是断裂。地图上跟着图钉走的气泡,图钉被缩放到视口外时应关闭或变成列表项,而不是漂在空地。屏幕阅读器用户不依赖箭头,断裂对他们表现为焦点还在层上、上下文却已是另一条——要用活的对象名(「回复给某某」)而不是位置来维持绑定。

怎么落地

  • 来源滚出视口、被卸载或被替换时,关掉浮层,或让浮层跟着来源一起滚,直到来源不可见再关。不要把层钉在屏幕坐标上。
  • 键盘顶起、窗口缩放之后,重新计算箭头命中的控件;命中不到任何触发器就关闭。
  • 提交类浮层在标题里写死对象名(「回复《标题》」),这样即便几何暂时漂了,语义绑定还在。
  • 验证:打开浮层后滚动、弹出键盘、切换筛选,看箭头还指不指在原来那个控件上。指向空白或指向邻居,这条关系就已经断了。

延伸

  • 同组F1.08.1 浮层需指向其触发来源 · F1.08.3 屏幕边界处需翻转而非截断
  • 相邻F1.09 弹层遮挡操作对象 · F1.10 键盘弹出后的可视压缩
  • 站内检索broken overlay anchor · orphaned popover · scroll dismissal

同组卡片

快捷操作

分享

分享当前页面

ios_share

https://hci.top/zh/handbook/F1.08.2