Bottom sheet

v3.0.0

Bottom sheets present supplemental content anchored to the bottom of the screen.

Stylized artwork of a bottom sheet.

Anatomy

A bottom sheet diagram with 3 elements numbered: 1. Scrim, 2. Container, 3. Drag handle.
  1. Scrim
  2. Container
  3. Drag handle

Properties

Container

The container adjusts to fit their content up to an initial maximum height. They can be expanded by scrolling content within the sheet or pushing to a fullscreen sheet.

An empty bottom sheet container.

Title

A title is required for bottom sheets. The title appears at the top and should summarize a decision or information within the sheet.

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

Header action

The header can have an optional action to the right of the title. The action can be an icon or text action, with a close icon being the default on web and no action on native iOS and Android. Text actions should follow a verb + noun structure and describe what will occur when pressed.

The close icon isn’t required on native, but a close icon will always be present if native accessibility options (like Android TalkBack) are enabled.

Three examples of header actions stacked. All have titles and the first has a close icon button. The second has a submit text button. The third has no action.

Input sheet

Input sheets are the most common and ask the user for input. These can be single-select or multi-select.

A bottom input sheet with a single select. There is no trailing action.

Single-select

A trailing header action is unnecessary when only a single option can be selected. The container dismisses automatically once a selection is made.

A bottom input sheet with a single select. There is no trailing action.

Multi-select

When multiple selections can be made, the sheet remains open until the user confirms the selection or dismisses it.

A bottom input sheet with a multi select. Two options are selected and a “Submit” action is in the top right.

Info sheet

Info sheets provide supplemental information. They don’t require input from the user and they don’t submit data.

A bottom info sheet with a title and short description. There is no trailing action.

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

Expanding native sheet

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 height is reached.

A small native bottom sheet taking over half of the mobile screen height.

Small native sheet

A large native bottom sheet taking over the full mobile screen height.

Large native sheet

Expanding web sheet

Web sheets behave the same way as native, but are inset on all sides.

A small web bottom sheet taking over half of the mobile screen height.

Small web sheet

A large web bottom sheet taking over the full mobile screen height.

Large web 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 iOS

Sheets on iOS extend the full width of the screen. They open up to 50% of the screen’s height by default with the option to expand upward when scrolled.

Use bottom sheets for long lists and richer content on iOS. For simple menus, use the native context menu instead.

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

50% of the height

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

100% of the height

Small Android

Sheets on Android extend the full width of the screen. They open up to 50% of the screen’s height by default with the option to expand upward when scrolled. Simple menus can use the native menu instead of a sheet.

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

50% of the height

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

100% of the height

Small web

Web uses bottom-aligned dialogs and popover menus instead of bottom sheets.

A web bottom sheet spanning 50% of the page height.

50% of the height

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

100% of the height

Medium

Bottom sheets update to side or center sheets on medium native screens.

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

Large

Bottom sheets update to side or center sheets on larger native screens.

A center sheet on a large screen.

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 full screen modals instead.

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

Navigation

Do keep decisions within bottom sheets simple and straightforward. If a push to a new view is needed, the sheet expands to a large sheet for the new view.

A bottom sheet spanning 30% of the page height contains a Choose color menu. The options shown are Walnut, Oak, Maple, Cherry, and Mahogany.

Don’t override sheet behavior to keep sheets small or dynamically adjust height between views.

A bottom sheet spanning 30% of the page height contains an Electronic menu. The options shown are Computers and Tablets, Smartphones and Accessories, Cameras and Photography, TV and Home Theater, and Audio Equipment. There is also an icon to the left of the Electronics title signifying a back button.

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.

Platform differences

Do use the appropriate sheet for the platform.

A web bottom sheet on the eBay mobile web page.

Don’t use native sheets on web.

A native bottom sheet on the eBay mobile web page.

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.

Change log

VersionDateNotes
3.0.0
Oct, 2024
  • Updated to eBay Evo
3.0.0
Feb, 2023
  • Updated component parts to use component property features
  • Consolidated component parts to remove redundancy
  • Updated list option base component to include a leading and trailing icon
  • Updated option list base component to use preset properties of updated list value component
  • Updated sheet header trailing button to use headerAction component part
  • Replaced action property of sheetHeader with trailing button? property
  • Added nested instance property to sheetHeader and primary bottom sheet component
  • Updated headerAction textButton to use updated Standard Button component
  • Added nested instance properties of updated component parts to main Bottom Sheet component
2.0.0
Jan, 2024
  • Updated sheet title size
  • Updated dismiss action to use button container
  • Removed leading status icon variant