Bottom sheet

A panel that slides up from the bottom of the screen and can be dragged between heights or flicked away.

the thing that slides up from the bottom on mobilehalf-screen popupbottom drawerswipe up panelshare sheetaction sheetbottomsheetpull-up card

See it

Live demo coming soon

What it is

A bottom sheet is a panel that rises from the bottom edge, stops at one of a few heights, and can be dragged between them or flicked away. It exists because phones are tall and thumbs are low: the controls land where the hand already is. iOS calls the stopping points detents (medium, large), Material calls the whole thing a bottom sheet, and everyone calls the little grey bar at the top a grabber or drag handle.

Use a modal bottom sheet (dimmed scrim, blocks the page) for the mobile job a modal dialog does on desktop: pick an option, confirm, share, filter. Use a persistent one, peeking at the bottom with the app still usable behind it, for a companion surface like a map's place list or a now-playing bar that expands. Snap points are the design decision worth spending time on: a peek height that shows the first row, a half height for the common case, full height for the long tail. Vaul is the go-to React implementation.

Gotcha: dragging and scrolling fight each other. A sheet with a scrollable body has to let the drag move the sheet only when the content is already scrolled to the top, otherwise every attempt to read the list closes the thing. Two more: pad for the home indicator with env(safe-area-inset-bottom), and size with dvh rather than vh so the sheet doesn't hide under mobile browser chrome.

Ask AI for it

Build a modal bottom sheet for mobile. It slides up from the bottom over a dimmed scrim, with rounded top corners (16px), a 36x4px grey drag handle centered at the top, and bottom padding of env(safe-area-inset-bottom). Give it snap points at 40% and 90% of dvh: dragging snaps to the nearest one with a spring, dragging past the lowest point (or flicking down fast) dismisses it, and tapping the scrim or pressing Escape closes it. The body scrolls internally, and drag-to-move only takes over when that scroll is at the top. Lock body scroll while open and respect prefers-reduced-motion.

You might have meant

drawermodal dialogscrimpopovertab bar