Sheet
A sheet is a dialog that enters from an edge of the window. On a phone it rises from the bottom, and on a wide screen it slides in from the right so the page beside it stays in view.
Bottom and side
Welders for Split
Ramesh Thapa
- Visa status
- Appointment booked
- Recruiter
- Marko
- Arrival
- 2 Nov
Open jobs, Split
- Welder6 open
- Pipe fitter4 open
- Electrician3 open
- Crane operator2 open
- Warehouse worker8 open
- Cook2 open
Below 640 px a dialog opens as a bottom sheet. It keeps the header, body and footer of the dialog and adds a grabber, so people can swipe it away with a thumb.
On wider screens a side sheet opens from the right for settings or details that people read beside the page, such as the admins of a job board next to its jobs.
When to use it
Use a side sheet when the page behind it stays part of the task: reading a candidate's details beside the list, or changing who can edit a job board while its jobs stay in view. When the task needs full attention, such as a form that creates something, use a dialog.
A side sheet comes from the right only. The left edge belongs to navigation, and a panel sliding in from there reads as part of it.
Anatomy
Both sheets share the header, body and footer of a dialog. The body scrolls on its own, so a long list does not move the header or the actions.
Visa status
- Grabber
- 40 by 4 px, 10 px from the top edge
- --surface-control, --radius-full
- Bottom sheet corners
- 16 px on the top corners
- --radius-2xl
- Bottom sheet height
- fits the content, up to 92 percent of the window
- Full height bottom sheet
- the whole window inside the safe areas, for long forms and records
- Space under the last control
- the bottom safe area, at least 12 px
- --space-3
- Close button on a phone
- 44 px
- Side sheet width
- 448 px, full width below 640 px
- Side sheet height
- the whole window
- Surface
- raised fill and shadow, with a fine top highlight and rim in the dark theme
- --glass-fill-raised, --glass-highlight, --glass-ring-raised, --elevation-3
- Scrim
- dims the page, no blur
- --overlay
Swipe and keys
Drag the grabber or the header down to close a bottom sheet. Dragging the body scrolls its content and leaves the sheet where it is. Short of the threshold, the sheet springs back.
With unsaved entries, a swipe springs back and asks “Discard the changes?” first. Escape and the close button behave as they do in a dialog.
- Close by distance
- a drag of more than 90 px
- Close by speed
- a flick faster than 500 px per second
- Drag upward
- no effect
- Escape
- closes the sheet, or asks first when entries are unsaved
Motion
A bottom sheet rises from below the window edge in 300 ms and leaves in 200 ms. A side sheet fades in while it travels 40 px from the right, over 200 ms. With reduced motion, both only fade.
Permitted and not permitted
Permitted
A side sheet next to the list it describes
People compare both without closing anything.
A grabber on a sheet that swipes away
It shows where to drag.
Not permitted
A side sheet from the left edge
It reads as navigation.
A swipe that closes a sheet holding unsaved entries
A slip of the thumb loses them. Spring back and ask first.
Accessibility
A sheet is announced and contained like a dialog: role dialog, aria-modal, the title as its label, focus kept inside and returned on close. The grabber is hidden from screen readers, since the close button does the same job.
On a phone the controls in a sheet are at least 44 px high.