Back to selected work

ELEVATION • DESIGN SYSTEMS

Creating an elevation system.

ROLE
Product Designer

METHOD
VScode

OUTCOME
Guide & CSS Tokens

ADOPTION
All platforms

Summary

Elevation is used to provide visual cues about a components depth from a website’s surface and its distance in relation to other components. ITHAKA had used elevation in certain places across its platforms, but it wasn’t a consistent effect that had a guide design and development could reuse. I wanted to fix all inconsistencies across each of our platforms for us to have a shared and scalable experience. I owned the creation, code, and implementation.

5 platforms

adopted and updated their components

Background

Context

ITHAKA has a wide variety of platform offering different services to different user bases: Students, librarians, researchers, and more, meaning we have to cater to those groups; aspects will inevitably be different. However, one thing that shouldn't change is our design system. Being siloed can result in discrepancies and the more our individual platform use cases expand, the more our needs split.

First steps

Auditing ITHAKA platforms

ITHAKA used elevation in certain places across its platforms, but it wasn't consistent. For example, a card on one platform would have a shadow, but on another, it wouldn't.

I gathered other designers from different platforms to have a discovery session. We took the time to audit the platforms we owned and bucketed components into 2 categories:

"Where elevation is used" and "Where elevation could be used".

This would eventually help me define the use cases and rules for this design system.

Here are some of the elevation discrepancies I recreated from the above audit, pulled from different ITHAKA platforms with different values:

COLLECTIONS USAGE / NAV MENU

outline only, no shadow

FORUM / NAV MENU

hard, opaque shadow

SUPPORT / PREDICTIVE SEARCH

black border, heavy shadow

JSTOR / PREDICTIVE SEARCH

light from upper left, no spread

ADMIN / FLOATING ACTION BUTTON

heavy, single shadow

JSTOR / FLOATING ACTION BUTTON

light from below

COLLECTIONS USAGE / NAV MENU

outline only, no shadow

FORUM / NAV MENU

hard, opaque shadow

SUPPORT / PREDICTIVE SEARCH

black border, heavy shadow

JSTOR / PREDICTIVE SEARCH

light from upper left, no spread

ADMIN / FLOATING ACTION BUTTON

heavy, single shadow

JSTOR / FLOATING ACTION BUTTON

light from below

Defining

When & how it should be used

Usage

Elevation will use surface shadows to create a sense of depth and lift, making designs feel more intuitive and engaging. It will guide the users' attention through means of visual layering, while signaling which elements are interactive or have become interactive.

Building elevation into a design system is key to creating a cohesive, standard, and immersive user experience.

Depth, shadows, and light

To communicate a component’s depth from a website’s surface and its distance in relation to other components, we'll need a system that has a consistent equation that can be built upon. I don't want to create anything arbitrary that leaves other designers with no knowledge on how to calculate higher elevation levels.

Calculating and creating

First: Shadow stacking

Stacking shadows is the direction I went forward with. By avoiding solid outlines, the components avoided harsh edges, which was especially helpful when elevation values rose to higher levels. Diffusion allowed the component to stay soft.

The top shadow gives the illusion of a stroke while the bottom shadow tackles the actual shadow.

If you only have the top shadow, the top of the component will blend into the background, and if you only have the bottom shadow the component will be undefined.

Outline only

Top shadow only

Bottom shadow only

Both shadows

Outline only

Top shadow only

Bottom shadow only

Both shadows

Second: Values

Though there is a set guide for us to follow, I needed to make sure that we could easily add levels if need be.

I needed to create a calculation.

To keep elevation levels harmonious, I constructed a 2 step system:

(use the calculator to the right to play with the levels)

(use the calculator below to play with the levels)

  1. The top shadow should consistently stay at these values no matter the elevation level: X = 0, Blur = 2, Y = 1, Spread = 0


  1. Starting at level 2 is when calculations are used. The bottom shadow should comply with the following system as each level rises: X = 0, Y +2, Blur +2, Spread +1

$pharos-elevation-level

X

0

Y

0

BLUR

0

SPREAD

0

box-shadow:

0

0

$pharos-elevation-level

X

0

Y

0

BLUR

0

SPREAD

0

box-shadow:

0

0

System visuals

Once I'd audited, calculated, and created the elevation system, I need to create a visual that communicated what levels to use on which component.

By following my guide, uniform usage across ITHAKA was guaranteed to be implemented.

Practices

Best practices

Dos

  1. Use when there is content behind a component and that component has content available to be interacted with.

  2. Alter the Y-axis for directional movement.

Donts

  1. Change the light source.

  2. Use hover elevation if interactive content is visually communicated in another way. Eg.The ability to move content is already visually communicated through the reorder icon.

  3. Apply elevation to components in order to be “visually pleasing”.

In practice

Some examples from the public facing JSTOR and JSTOR Digital Stewardship Services:

Sticky header ($pharos-elevation-0->2)

Predictive search ($pharos-elevation-2)

Modal ($pharos-elevation-5)

Dropdown ($pharos-elevation-3)

Principles

Elevation principles

Consistent

All elevation is used at the appropriate level assigned to that component. Always follow the recommended shadow pairings.

Suitable

Dynamic elevation should only change values when suitable for a component’s behavior.

Practical

Elevation is not solely used for visually enjoyment. It should communicate to users that there is an emphasis or prioritization when it comes to a given component.

Code

Development application

Tokens

I converted all values into CSS, providing tokens for developers to easily apply them to components in our library.

Below is the code I wrote for our tokens and below that are the elevation levels - free to copy and try them out for yourself!

TOKEN · VALUE — CLICK TO COPY

$pharos-elevation-1

0 1px 2px 0 rgba(0,0,0,.13)

COPY

$pharos-elevation-2

0 1px 2px 0 rgba(0,0,0,.13), 0 2px 4px 1px rgba(0,0,0,.14)

COPY

$pharos-elevation-3

0 1px 2px 0 rgba(0,0,0,.13), 0 4px 6px 2px rgba(0,0,0,.14)

COPY

$pharos-elevation-4

0 1px 2px 0 rgba(0,0,0,.13), 0 6px 8px 3px rgba(0,0,0,.14)

COPY

$pharos-elevation-5

0 1px 2px 0 rgba(0,0,0,.13), 0 8px 10px 4px rgba(0,0,0,.14)

COPY

Want to talk more? Contact me!