E4.19.3in-dialog scroll not overflow设计研究
内容超出可视高度时需要内部滚动而非撑破弹层
别名: 对话框内滚动 · 撑破弹层 · 溢出滚动 · dialog overflow
概念解释
内容比对话框的可视区域高时,多出来的部分必须在框里面滚,框自己停在视口内。撑破是让框跟着内容长出窗口,按钮、标题被顶到看不见的地方,或整页跟着滚起来,遮罩和框的关系散掉。内部滚动把「这份对话」的边界保住,把溢出留给内容区。标题和提交按钮通常应钉在滚动区外,免得为了按确定把问题滚走。
机制
对话框是视口里的一块封闭表面。封闭一旦被内容撑破,表面就不再封闭:用户滚动的可能是下面的页面,框在滚动中错位,遮罩出现缝,点到外面的主内容。内部滚动把滚动容器设在内容区,框的外沿与视口的关系稳定。标题、关闭、主按钮若参与内容滚动,决策控件会离开视口,人以为对话没有完成手段。把它们钉在两端,中间滚,是在保「问题与提交始终在」。滚动还要有溢出提示,否则看不出还能往下。滚的是对话内容,不是后面的应用——滚轮落在框上时不应穿透去滚主表面。
怎么研究
用一份高于视口的表单,比较内部滚动、撑破窗口、整页滚动三种。记录标题和提交是否始终可达、是否误滚了主表面、遮罩是否错位。自变量:钉住的是哪些槽、滚轮是否被框捕获。因变量:提交可达性、穿透滚动。撑破条件下提交不可达的比例应最高。
边界
内容只高出一点点时,优先略增框高而不是立刻出现几乎不能动的滚动条。全屏对话的「内部滚动」就是页面滚动,但仍应钉住提交,不要让确定跟着文案飞走。嵌套滚动(框内还有可滚的列表)会抢手势,需要明确哪一层在吃滑动。打印没有滚动,超高内容应分页,不能假设内部滚动在纸上成立。
怎么落地
- 内容区作为唯一滚动容器;标题与主按钮钉在框的两端。
- 框不得超出视口;滚轮在框上时不要滚主表面。
- 溢出时露出下一字段的残片,表明还能往下。
- 验证:在短视口打开长表单,不滚动应仍能看见提交;滚动时遮罩与框的外沿不动。提交跟着内容跑出视口,就是撑破了。