Summary
- 内层滚动区碰到边缘,浏览器可以把余下的手势传给外层。聊天框已没有下一条消息,背景文章却继续往前跑,这就是滚动链在读者面前露了脸。
contain拦住向外传递,同时保留内层的边缘反馈;none连本地的回弹或提示也压掉。两者对读者的感觉不同。
设想一篇长报道右下角嵌着聊天窗。读者滚到最后一条消息,轮子还在转;光标没离开聊天窗,报道却往下翻了一屏。W3C 2019 年的首份公开草案把这里的结构叫作滚动链:手势从内层容器开始,遇到边界时可能向祖先容器继续传递。网页没有读心术。它只知道小窗到底了,还有滚动量没花完。
早期补救常靠脚本守在边缘,监听触摸或滚轮事件,必要时调用 preventDefault()。草案列出的代价很具体。非 passive 的监听器会让浏览器等脚本表态,滚动因此可能延迟;粗暴取消事件,还可能把正常滑到边缘的动作一起取消。更麻烦的是,同一个默认动作里可能既有向外传递,也有小窗自己的边缘光效。作者若只想拦住大页面,不必顺手没收小窗的“到站提示”。一把闸刀,切不开两根线。
2016 年 12 月 CSS 工作组会议记录保留了这道题尚未定名时的争论。提案当时叫 scroll-boundary-behavior,接着微软此前的 -ms-scroll-chaining 思路。Tab Atkins 问的是滚动意图到了顶部或底部之后,究竟该逃出去还是留在原地。Simon Fraser 提醒大家,有的浏览器会在一次手势内锁定滚动目标,也担心网页借此把人困住。聊天小部件滑到底是会议里明说的用例。工作组赞成把行为规范化,却没有当场把细节拍板;连属性名都还需要改。
到了 2018 年 1 月,编辑 Majid Valipour 提议把已在 WICG 孵化的 overscroll-behavior 移入 CSS 工作组草案。他在议题中记下当时已有的浏览器进展。真正耐人寻味的是规则的归属:一个处理小窗“越界”的技巧,开始变成浏览器与网站之间可讨论、可实现的共同契约。网站可以说出边界,浏览器则负责处理手势。
W3C 的发布记录把 2019 年 6 月 6 日列为首份公开工作草案的日期。草案没有把三种取值写成强弱不同的“禁用键”,而是分开两类行为:小窗自己的边缘光效或回弹属于本地动作;带动祖先页面、触发导航等属于非本地动作。auto 交给浏览器按通常方式处理。contain 禁止非本地动作,留下本地提示。none 连本地提示也关闭。聊天窗通常只需关上通往整页的门;无限滚动列表若不想出现回弹,才可能需要更安静的边缘。
边界还得知道方向。横向和纵向属性容易理解,却默认设计者在想固定的 x、y 轴。2018 年柏林会议决定加入 overscroll-behavior-block 与 overscroll-behavior-inline,让规则跟随文字排版的逻辑方向。对于有多种文字方向的网站,这不是语法糖,而是承认“往下”未必总是同一根物理坐标轴。
草案的三个例子把选择讲得明白:固定侧边栏不想把滚动递给正文;自制下拉刷新需要挡住浏览器原有的边界动作;无限列表可能连回弹效果也不想要。设计者应先问读者到边缘时想看见什么,再挑取值。下次聊天窗来到最后一句,网页可以安稳待在原处,小窗也可以礼貌地告诉手指:这里到头了。
会员简报
档案背景详情
使用相应会员等级登录,即可解锁完整简报与来源注释。
仅限 Strategic Circle
Strategic Circle
所有读者均可浏览。加入并登录后可解锁档案简报。
加入 Strategic Circle仅限 Leadership Alliance
Leadership Alliance
符合条件的 IP 资产所有者和管理层可登录查看 Leadership Alliance 简报。
加入 Leadership Alliance





