E4.19.3in-dialog scroll not overflow设计研究

内容超出可视高度时需要内部滚动而非撑破弹层

别名: 对话框内滚动 · 撑破弹层 · 溢出滚动 · dialog overflow

概念解释

内容比对话框的可视区域高时,多出来的部分必须在框里面滚,框自己停在视口内。撑破是让框跟着内容长出窗口,按钮、标题被顶到看不见的地方,或整页跟着滚起来,遮罩和框的关系散掉。内部滚动把「这份对话」的边界保住,把溢出留给内容区。标题和提交按钮通常应钉在滚动区外,免得为了按确定把问题滚走。

机制

对话框是视口里的一块封闭表面。封闭一旦被内容撑破,表面就不再封闭:用户滚动的可能是下面的页面,框在滚动中错位,遮罩出现缝,点到外面的主内容。内部滚动把滚动容器设在内容区,框的外沿与视口的关系稳定。标题、关闭、主按钮若参与内容滚动,决策控件会离开视口,人以为对话没有完成手段。把它们钉在两端,中间滚,是在保「问题与提交始终在」。滚动还要有溢出提示,否则看不出还能往下。滚的是对话内容,不是后面的应用——滚轮落在框上时不应穿透去滚主表面。

怎么研究

用一份高于视口的表单,比较内部滚动、撑破窗口、整页滚动三种。记录标题和提交是否始终可达、是否误滚了主表面、遮罩是否错位。自变量:钉住的是哪些槽、滚轮是否被框捕获。因变量:提交可达性、穿透滚动。撑破条件下提交不可达的比例应最高。

边界

内容只高出一点点时,优先略增框高而不是立刻出现几乎不能动的滚动条。全屏对话的「内部滚动」就是页面滚动,但仍应钉住提交,不要让确定跟着文案飞走。嵌套滚动(框内还有可滚的列表)会抢手势,需要明确哪一层在吃滑动。打印没有滚动,超高内容应分页,不能假设内部滚动在纸上成立。

怎么落地

  • 内容区作为唯一滚动容器;标题与主按钮钉在框的两端。
  • 框不得超出视口;滚轮在框上时不要滚主表面。
  • 溢出时露出下一字段的残片,表明还能往下。
  • 验证:在短视口打开长表单,不滚动应仍能看见提交;滚动时遮罩与框的外沿不动。提交跟着内容跑出视口,就是撑破了。

延伸

  • 同组E4.19.1 对话框尺寸应随内容量而非固定写死 · E4.19.2 窄屏下对话框常需退化为全屏展示 · E4.19.4 尺寸变化时已聚焦的元素位置不应跳变
  • 相邻E4.10 模态对话框 · E4.04 表头固定与横向滚动
  • 站内检索dialog scroll · sticky footer · overflow

同组卡片

快捷操作

分享

分享当前页面

ios_share

https://hci.top/zh/handbook/E4.19.3