跳到主要内容
界面图谱Interface Atlas
☰
EN
组件Overlay / Feedback

模态框

Modal

别名:弹窗对话框模态弹窗确认弹窗弹出对话框遮罩弹窗网页中间弹出来的窗口

这是什么

覆盖在页面之上、带半透明遮罩的对话框,打断用户当前流程,要求先完成弹窗内的任务或决策。 遮罩阻断与底层页面的交互,焦点被暂时困在弹窗内,是容器类浮层中打断程度最高的一种。

名词辨析

Modal 居中打断当前任务、要求处理;Drawer 从侧边滑出保留上下文;Popover 锚定触发元素、非打断;Sheet 只罩住当前窗口(macOS)。

交互实验室

试一试,再决定怎么用

打开对话框,尝试确认、取消与关闭。

正在加载实验室…

使用时关注什么

  • 01模态开启期间焦点应留在对话框内。
  • 02关闭后回到触发入口,避免丢失操作位置。

✓ 适用场景

  • 需要明确决策的破坏性操作(删除、支付)
  • 任务必须完成后流程才能继续(向导、登录)
  • 需要专注处理的临时内容(详情、快速编辑)

✕ 不适用场景

  • 内容是辅助性的、可随时关闭(改用 popover 或 tooltip)
  • 用户需要对照底层页面操作(改用 drawer)
  • 移动端长内容滚动(改为全屏页面更稳)

常见形式

居中对话框

Centered

最经典形态,标题 + 正文 + 操作区

紧凑确认框

Confirm

小尺寸,只放一句文案和两个按钮

底部面板

Sheet

移动端常见,从底部升起承接长内容

实现要点

position: fixedinset: 0z-indextransformbackground-color

遮罩用 fixed inset-0 + 半透明黑,面板用 flex 居中或 inset-0 m-auto。 打开时锁定 body 滚动,焦点移入面板,Esc 与点击遮罩均可关闭。 入场动画 scale 0.96→1 加淡入,200ms 左右;尊重 prefers-reduced-motion。

平台 API

<dialog>role="dialog"aria-modal="true"

代码里叫什么

同一控件在不同体系里的叫号——用对名字,Prompt 和检索才准。

体系名称
ARIArole="dialog"
shadcn/uiDialog
MUIModal / Dialog
AntDModal
模态框Modal底部抽屉Bottom Sheet抽屉Drawer气泡卡片Popover
打断程度高,遮罩阻断底层操作中高,有遮罩但可下滑快速关闭高,打开时遮罩挡住页面低,无遮罩不阻断页面
内容容量中,适合短内容与小型表单中高,适合操作列表与短表单高,可承载长列表与表单中,小型交互内容
移动端友好中,长内容需转全屏优,拇指热区在屏幕底部好,边缘滑动符合直觉差,锚定位置易溢出屏幕

相关概念

抽屉Drawer

从屏幕边缘(多为右侧或左侧)滑入、通常带遮罩的面板。比模态框轻:能承载较长内容又不离开当前页面, 关闭后原样回到上下文;移动端常以左滑导航或底部抽屉的形式出现。

组件替代方案
气泡卡片Popover

点击触发元素后在其旁边弹出的非模态浮层,可承载文字说明、小型表单、日期选择等中等复杂内容。 无遮罩、不阻断页面其余部分,点击外部区域或 Esc 即关闭。

组件替代方案
轻提示Toast

在视口角落短暂出现、自动消失的小消息条,用来告知操作结果(已保存、已复制、上传完成)。 不打断当前流程,通常附一个操作入口(撤销、查看),停留约 3~5 秒后淡出。

组件相似概念
警告提示Alert

嵌在页面流内、带状态色底色的横条,用于必须被看见的消息:错误、警告、重要通知。 它占据文档流而不是覆盖内容,通常常驻直到问题被处理或用户手动关闭。

组件相似概念

容易混淆

抽屉Drawer

Drawer 从边缘滑出、空间更大,Modal 居中且更强调打断。

气泡卡片Popover

Popover 非模态、锚定触发器,Modal 遮罩整页并阻断操作。

警告提示Alert

Alert 是页内消息条,不打断;Modal 是必须处理的浮层。

灯箱Lightbox

Lightbox 专管图片/视频放大,Modal 承载通用任务。

可搭配的风格

参考来源

Markdown 版(给 Agent) · JSON