Elevation

The elevations are the layered containers that form the foundation of the UI. They create a blank canvas where other UI will be placed, such as text, icons, backgrounds, and borders.

Component checklist

Design

Up to date

React

Up to date

Elevations in the Soul Design System consist of containers and shadows. Soul also uses color as an alternative to shadows to communicate elevation. Both options give the impression of lift or depth. Elevations can guide focus through layering or indicate that the UI can be scrolled, slid, dragged, or clicked.

Elevation levels

The elevation system is purposely limited to just a handful of levels. This constraint means you must make thoughtful decisions about your UI’s elevation story.

We defined six elevation levels. An element’s resting state can be on levels 0 and 1, while levels 2, 3, and 4 are reserved for user-interacted states such as hover or dragged. 5th level creates a new, focused UI layer to redirect the user's attention.

Levels
  • Level 0 is the lowest available elevation. The container, in this case, creates a background where other content sits.
  • Level 1 is the default elevation for all containers like widgets, content cards, or tables. In special circumstances, it can be used for cards as a way to provide additional hierarchy or emphasis.
  • Level 2 is used to communicate hover states by changing the shadow or color of an element or container. Soul dedicated shadow 200 for this elevation level. Color depends on the element's default properties.
    • Use a shadow change for interaction with the container in elevation level 1
    • Use color change for interaction in elevation level 0
  • Level 3 is used the most for elements populated by some action, e.g., click to select field, are used elevation level 3. For this level, Soul uses Shadow 300.
  • Level 4 is used in Soul for floating containers such as a multi-action bar, dialogs without overlay, or dragged elements. To represent this level, use shadow 400.
  • Level 5 is used once you need to change the user's attention. In this case, Soul usually uses an overlay layer between the original interface and the elevated element. Exceptions are fullscreen dialogs, which create a new layer of UI.

Overlay

The overlay serves to temporarily highlight important content—such as modals, panels, or notifications—by isolating it from the primary interface, thereby directing user attention. Read detail specification

Overlay

Overlay

Overflow

Overflow is another type of elevation that helps users to recognize content has scrolled outside a view using the shadow or border. It can be used for both vertical and horizontal scrolls.

An example of overflow shadows is the horizontal scroll in tables.

An example of overflow shadows is the horizontal scroll in tables.

When the content exceeds the available area, a border or shadow can be applied at the point the content is cut off to indicate there is hidden content that can be scrolled back into view.

Overflow - header

A border is the default approach for scrolled content and can be seen in dialog sticky headers and footers and top and side navigation.

Shadows are reserved for experiences where a border might be easily missed, such as in very small UI or tables that use borders to separate cells. Use shadow 300 with an angle of 0º or 180º to direct it over the content.

Shadows

Soul has defined four levels of shadow to help users recognize the distance between elements. Each level has a top-bottom direction by default. This can be changed if the element is stuck to the bottom of the screen or another element.

Shadow
0 1px 3px 0 rgba(0,0,0,0.2), 0 0 0.5px 0 rgba(0,0,0,0.3), inset 0 0 1px 0 rgba(0,0,0,0.05), inset 0 0.25px 0 0.25px rgba(0,0,0,0.05)
0 1px 3px 0 rgba(0,0,0,0.2), 0 0 0.5px 0 rgba(0,0,0,0.3), inset 0 0 1px 0 rgba(255,255,255,0.05), inset 0 0.25px 0 0.25px rgba(255,255,255,0.05)
Shadow / Shadow 100
Default shadow style for containers with layer level 1 background on layer level 0.
0 5px 12px 0 rgba(0,0,0,0.1), 0 1px 3px 0 rgba(0,0,0,0.2), 0 0 0.5px 0 rgba(0,0,0,0.3), inset 0 0 1px 0 rgba(0,0,0,0.05), inset 0 0.25px 0 0.25px rgba(0,0,0,0.05)
0 5px 12px 0 rgba(0,0,0,0.1), 0 1px 3px 0 rgba(0,0,0,0.2), 0 0 0.5px 0 rgba(0,0,0,0.3), inset 0 0 1px 0 rgba(255,255,255,0.05), inset 0 0.25px 0 0.25px rgba(255,255,255,0.05)
Shadow / Shadow 200
The shadow style for the hover of containers with layer level 1.
0 10px 16px 0 rgba(0,0,0,0.1), 0 1px 5px 0 rgba(0,0,0,0.2), 0 0 0.5px 0 rgba(0,0,0,0.3), inset 0 0 1px 0 rgba(0,0,0,0.05), inset 0 0.25px 0 0.25px rgba(0,0,0,0.05)
0 10px 16px 0 rgba(0,0,0,0.1), 0 1px 5px 0 rgba(0,0,0,0.2), 0 0 0.5px 0 rgba(0,0,0,0.3), inset 0 0 1px 0 rgba(255,255,255,0.05), inset 0 0.25px 0 0.25px rgba(255,255,255,0.05)
Shadow / Shadow 300
The shadow style for popovers and select lists.
0 10px 24px 0 rgba(0,0,0,0.2), 0 1px 5px 0 rgba(0,0,0,0.2), 0 0 0.5px 0 rgba(0,0,0,0.3), inset 0 0 1px 0 rgba(0,0,0,0.05), inset 0 0.25px 0 0.25px rgba(0,0,0,0.05)
0 10px 24px 0 rgba(0,0,0,0.2), 0 1px 5px 0 rgba(0,0,0,0.2), 0 0 0.5px 0 rgba(0,0,0,0.3), inset 0 0 1px 0 rgba(255,255,255,0.05), inset 0 0.25px 0 0.25px rgba(255,255,255,0.05)
Shadow / Shadow 400
The shadow style for floating containers, e.g., dialog without overlay layer below it.
  • Shadow 100 is the default shadow style used for most boxes to differentiate them from the background.
  • Shadow 200 can be used to represent the interactivity of the element. It is used for the hover state of elements with Shadow 100 applied.
  • Shadow 300 represents the 3rd elevation level, and it is applied to elements populated by action, e.g., for the select list, which is shown by clicking on the select field or for the popover.
  • Shadow 400 is the strongest shadow used on "floating" elements of the UI, e.g., a multi-select bar or panel without an overlay.