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

底部抽屉

Bottom Sheet

别名:底部抽屉底部面板上拉面板手机底部弹出来的面板底部弹层bottom sheetaction sheet

这是什么

从屏幕底边升起、覆盖在当前页面之上的面板,顶部有抓手可供拖动或下滑关闭。打断程度介于模态框与 气泡卡片之间:有遮罩但拇指可及、可下滑快速收起。是移动端承接筛选、分享、短表单的默认容器, 桌面端应改用侧边抽屉或居中对话框。

名词辨析

「抽屉」有歧义:底部抽屉(Bottom Sheet)指从底边升起的面板;侧边抽屉(Drawer)从左右边缘滑入; 系统对话框的 sheet 是居中弹出的文档式窗口;表格软件的 sheet 则指工作表,与浮层无关。

交互实验室

试一试,再决定怎么用

打开底部抽屉,拖动抓手在档位间切换,再下滑关闭,感受它与侧边抽屉的差别。

正在加载实验室…

使用时关注什么

  • 01下滑或点遮罩可关闭,Esc 同样有效
  • 02面板贴底升起,操作按钮落在拇指热区

✓ 适用场景

  • 移动端筛选、排序、分享等短任务,需覆盖在当前页上
  • 操作列表或选项数量有限,单手拇指可达
  • 内容比一行 tooltip 多、比整页流程短

✕ 不适用场景

  • 桌面端为主的界面(改用 drawer 或 modal)
  • 需要强制决策、不可轻易关闭(改用 modal)
  • 长表单或长篇阅读(改为全屏页面更稳)

常见形式

固定高度

Fixed height

内容量可预期,一次到位不拖拽

可拖拽档位

Draggable detents

抓手拖到半开 / 全开档位,iOS Sheet 风格

全屏展开

Full expand

上拉占满屏幕,适合长内容或键盘弹出

实现要点

position: fixedtransformtransitiontouch-action

面板 fixed 贴底,用 transform: translateY(100%) ↔ 0 收放(不要动 height,GPU 友好); 顶部抓手为 36×4 圆角条。拖拽档位用 pointer 事件跟踪 dy,松手按阈值吸附到最近档位; 下滑超过阈值关闭。遮罩淡入、body 滚动锁定、焦点移入面板,Esc 关闭;尊重 prefers-reduced-motion。

平台 API

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

代码里叫什么

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

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

相关概念

抽屉Drawer

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

组件替代方案
模态框Modal

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

组件替代方案
下拉刷新Pull to Refresh

在列表顶部按住并向下拖动,出现随拖动距离变化的加载指示,超过阈值后松手即重新拉取最新数据。 它解决的是"内容可能已经过期"的问题——用户主动、可预期地请求更新, 而不是被动等待自动轮询,刷新的时机和结果都由自己掌控。

交互模式搭配使用

容易混淆

抽屉Drawer

侧边抽屉从左右边缘滑入,底部抽屉只从底边升起。

模态框Modal

模态框居中且强调强制决策;底部抽屉贴底、可下滑关闭。

可搭配的风格

参考来源

Markdown 版(给 Agent) · JSON