Bottom sheet

v3.1

The bottom sheet is a native-only component that presents supplemental content anchored to the bottom of the screen.

For web, use a Dialog instead.

  • Skin
  • Marko
  • React
Stylized artwork of a bottom sheet.

Anatomy

A bottom sheet diagram with 3 elements numbered: 1. Scrim, 2. Container, 3. Drag handle.
  1. Drag handle
  2. Title
  3. Close button
  4. Content area
  5. Footer
  6. Footer button

Properties

Container

The container adjusts to fit its content up to preset height. They can be expanded by scrolling content within the sheet or pushing to a fullscreen sheet.

An empty bottom sheet container.

Header

The header contains a title and a close button. Sheets require an accessible title that summarizes its purpose. Keep titles short and concise.

Content area

The content area includes all fields and information necessary to complete the sheet’s task. Keep sheet content simple and focused on the task to reduce cognitive overload.

Footer

The footer provides a consistent location at the bottom of the sheet for actions. The actions in the footer allow for completing, canceling, or moving to the next step of a task.

A single-select bottom sheet with a title in the top left.

Scrim

The scrim blocks interaction with the main page and is active by default. Use the scrim to focus on the task within the sheet.

The scrim can be turned off when interaction with the main page is needed, like navigating a map where the sheet contains information about a selected location.

A bottom sheet is shown with emphasis on the scrim behind the sheet.

Behavior

Scrolling

The vertical height of the sheet defaults up to 50% of the screen height to provide quick access to popular actions. When the content is scrolled, the sheet slides to full height and the content body scrolls when the full height is reached.

A bottom sheet is shown with emphasis on the scrim behind the sheet.

Height

The height of the sheet can be smaller than 50% of the screen height if there are only a few options. The minimum height is 30% of the screen height. It’s acceptable to have white space below options if the minimum height has additional room below the sheet content.

Content should open directly to a full modal overlay for long-form content or a large selection group with no apparent hierarchy of importance.

A bottom sheet containing a category selector is taking up 30% of the mobile screen height.

30% minimum height

A bottom sheet containing a category selector is taking up 30% of the mobile screen height.

Full modal

Device keyboards

If a sheet has input fields, the sheet expands upward with the native keyboard as the field gains focus. The sheet moves back down when the keyboard is collapsed.

A bottom sheet showcases the iOS number keyboard.

iOS keyboard

A bottom sheet showcases the Android number keyboard.

Android keyboard

Modality

Bottom sheets can be either modal or non-modal. The default is modal, so interactions with the main page are blocked by a scrim until the sheet is dismissed.

Non-modal sheets omit the scrim and allow for interactions with the main page and the sheet content. This is common for experiences like navigating a map. A non-modal sheet allows for freedom of movement of the content below while also providing quick access to supplemental information.

A modal bottom sheet is shown with single select for selecting a category.

Modal bottom sheet

A non-modal bottom sheet is shown with an interactive map element.

Non-modal bottom sheet

Dismissing

Bottom sheets can be dismissed by:

  • Selecting a single-select value
  • Tapping a close action
  • Swiping downwards
  • Tapping outside of the sheet (modal only)
  • Tapping a hardware back button

Asynchronous updates are preferred as users make selections within a sheet. Since the selections are already being made, dismissing the sheet doesn’t reset anything. If asynchronous updates are unavailable or disabled, dismissing a bottom sheet via the scrim, drag gesture, or a close button cancels the decision and returns to the state before the sheet was triggered.

A bottom sheet container is shown with 4 tap indicators displaying where to dismiss a bottom sheet: Tapping outside of the sheet, swiping downwards on the drag handle, tapping a close action, or selecting a value.

Screen size

Small screens

Sheets extend the full width of the screen and can open partially or fully by default. Partial height sheets expand to full height sheets when the content is scrollable.

Use bottom sheets for focused breakout tasks and selecting from a large list.

A bottom sheet spanning 50% of the page height on iOS.

iOS modal stack

A bottom sheet spanning 100% of the page height on iOS, with a popover menu below an overflow icon.

Android fullscreen overlay

Medium screens

Bottom sheets are aligned to the center of the screen on tablet.

Choose list
Value
Caption
Description
Mom’s birthday
Description
New apartment
Description
Second list
Description
Chef approved cooking supplies
Description
Macbooks
Description
Dorm supplies
Description
Disney trip 2021
Description
Father’s day
Description
Summer fit
Description
Exercise
Description
Update

Best practices

Stacking

Do use a single bottom sheet per action.

A bottom sheet is shown on mobile spanning 50% of the screen height.

Don’t launch other modal elements, like other bottom sheets, from a bottom sheet. This quickly becomes inaccessible and disorienting. Use fullscreen overlays instead.

A bottom sheet spanning 30% of the page height is stacked in front of a bottom sheet spanning 50% of the page height.

Priority

Do use bottom sheets for low-to-medium-priority decisions and messages.

A bottom sheet spanning 50% of the page height contains a Choose list menu. The options shown are Mom’s birthday, New apartment, Second list, and Chef approved cooking supplies.

Don’t use bottom sheets for high-priority decisions or messages. Use an alert dialog instead.

A bottom sheet spanning 50% of the page height contains a Remove items decision menu. A ‘Remove from this list’ Primary CTA  sits above a ‘Delete from all lists’ destructive CTA.

Specs

A bottom sheet with specs is shown. The top padding of the container is 8px, the left and right padding of the container is 16px. There is a 32px close action and the title is middle-aligned with the button.