很多产品把“弹窗”当成默认交互,结果用户被反复打断。正确的姿势是:能页面内反馈的就别弹,必须打断时才用弹窗,且每个弹窗都要有明确目的。
确认框用于保护性操作,抽屉用于上下文任务,全局提示用于轻量反馈——形态选对,体验自然顺。
口诀:能轻则轻,能内则内,弹窗留给真正需要强关注的操作。
四种形态,对应四种反馈强度。
强关注操作,阻断页面,需明确确认/取消。
从侧边滑出,适合编辑、详情等上下文任务。
右上角短暂出现,非阻塞反馈操作结果。
气泡/Tooltip,解释性信息。
操作完成后的明确反馈与后续引导。
删除等操作需输入关键词或二次确认。
把弹窗做对的关键细节。
按操作强度选择 Modal/Drawer/Message,避免误用。
打开时焦点移入弹窗、关闭时焦点回到触发元素,支持 Esc 关闭。
弹窗内滚动隔离,遮罩点击策略明确(默认不关闭)。
语义化角色、aria 属性、懒挂载,弹窗内容较多时按需渲染。
选型决策表。
| 维度 | Modal | Drawer | Message | Tooltip |
|---|---|---|---|---|
| 打断强度 | 高 | 中 | 低 | 极低 |
| 适用操作 | 确认/强关注 | 编辑/详情 | 结果反馈 | 解释说明 |
| 关闭方式 | 确认/取消/Esc | 保存/关闭/Esc | 自动消失 | 移开即消失 |
| 阻塞程度 | 遮罩阻断 | 内容区可交互 | 不阻断 | 不阻断 |
信息量大的页面跳转、可内联展示的表单、简单提示——这些场景用页面或轻量反馈更好,避免频繁打断。
默认不要。遮罩关闭容易误触导致数据丢失;确需关闭也要二次确认。
表单提交后按结果反馈;大表单建议用抽屉而非 Modal,避免弹窗过高。
会变成“狼来了”,用户不再关注。重要操作结果才用全局提示,普通操作在页面内反馈即可。