한국어
← All categories
06

Interaction & states

States are what mockups leave out most often. Hand over only the resting state and the developer will invent the rest. Also worth remembering: there is no hover on mobile.

19 terms19 live demos
Think of states as a set of six

Default, hover, focus, pressed, selected, disabled. Define all six every time you build a component and development stops guessing → Deep dive: why one button needs six states

01

State

상태

When this comes up

When a developer asks "what does hover do?". Missing from the mockup, this is where things stall.

The condition an element is in. The same button should look different at rest, on hover, while pressed, and when disabled.

See it Try clicking
Default
Hover
Focus
Pressed
Selected
Disabled

Defining this set of six for every component is where a design system begins. → Step through it in the deep dive

Easy to get wrong

States are the single most commonly missing thing in design mockups. Hand over only the resting state and the developer invents the rest. Define at least these six: default, hover, focus, active, selected, disabled.

Ask for it like this

Define six states for each component — default / hover / focus / pressed / selected / disabled. Include a loading state for anything waiting on data.

02

Hover

호버

When this comes up

"Change the colour on mouse-over" — and the mobile question must follow immediately.

The state where the cursor is resting over an element. It signals "this is pressable" before the click.

See it Try clicking
Hidden note

If you are reading this on a phone, nothing will have changed. That is precisely the problem.

Easy to get wrong

There is no hover on mobile. A finger is either touching the screen or not. So anything shown only on hover is permanently invisible on a phone. Open a dropdown on hover only and it never opens on mobile — an accident that happens constantly.

Ask for it like this

Add hover effects, but do not build anything reachable only by hover. There is no hover on mobile, so everything must also work on tap.

03

Focus

포커스

When this comes up

"Remove this blue outline" — a request you should push back on.

The state of being selected via the Tab key. It shows which element you are currently operating.

See it Try clicking

Do not click — move using only the Tab key. Being able to see where you are is the correct behaviour.

Easy to get wrong

Never delete the focus ring because it looks ugly. Anyone who cannot use a mouse is lost on the screen the moment it goes. If you dislike the design, do not remove it — draw a nicer focus style.

Ask for it like this

Do not remove the focus ring. Restyle it in the brand colour instead. If it should appear only for keyboard navigation and not on mouse click, use :focus-visible.

04

Active · Pressed

액티브 · 프레스드

When this comes up

"The button does not react when I press it" — the cause of duplicate orders.

The state during the moment a button is held down. It disappears when the finger lifts.

See it Try clicking
← it sinks slightly while held
Easy to get wrong

Without this feedback on mobile, people think "did that register?" and press again — sometimes ordering twice. Press feedback is not decoration; it prevents misfires.

Ask for it like this

Add a pressed (active) state to buttons. Also switch submit buttons to disabled + loading after the first press to block duplicate clicks.

05

Selected

셀렉티드

When this comes up

"I cannot tell which filter is on"

The state of being chosen and staying that way. It persists after you let go.

See it Try clicking
Easy to get wrong

Different from active (the instant of pressing). Tabs, filter chips and checkboxes need a selected state for anyone to know what is on. Marking selection by colour alone excludes colour-blind users, so change weight or add an icon as well.

Ask for it like this

Distinguish the selected state by font weight and a check icon as well as colour, so colour-blind users can tell.

06

Disabled

디스에이블드 · 비활성

When this comes up

"Why will the button not press?" — a state that comes back as support tickets.

The state of being unusable right now. Greyed out and unresponsive.

See it Try clicking
✗ No reason given
✓ Reason shown
Agree to the terms to sign up
Easy to get wrong

Without saying why it is disabled, people simply get stuck. Put an explanation beside it — "you must accept the terms to sign up" — or often better, leave the button enabled and, on press, point out what is missing.

Ask for it like this

Add a note below the disabled button explaining why it is disabled. Alternatively, consider leaving it enabled and scrolling to and focusing the missing field when it is pressed.

07

Read-only

리드온리 · 읽기 전용

When this comes up

"This value must not be editable, but it still has to be saved"

The state of being viewable and copyable but not editable.

See it Try clicking
Easy to get wrong

Different from disabled. Read-only values are submitted; disabled values are not. For something like a name pulled from the account into an order form — editing blocked but the value still needed — read-only is required. Get this wrong and data goes missing.

Ask for it like this

The orderer name must not be editable but must still be submitted, so use readonly. With disabled, the value would not be sent.

08

Transition

트랜지션

When this comes up

"Make it a bit smoother" — a request you have to convert into numbers.

Making a state change ease rather than jump.

See it Try clicking

Hover over each button. The way the colour changes differs.

Easy to get wrong

Duration matters. 150–300ms feels natural; past 500ms it starts to drag. Write "smooth" in a mockup and the developer picks a number, so give the number.

Ask for it like this

Add transitions to state changes — 150ms for colour and background, 250ms for size and position, easing standardised to ease-out.

09

Animation

애니메이션

When this comes up

"Add some movement here"

Elements moving or changing over time. Where a transition is one A→B, an animation can run several stages and repeat.

See it Try clicking
An example of a repeating animation
Easy to get wrong

For people sensitive to motion (vertigo, vestibular conditions) operating systems offer a "reduce motion" setting. If you are using large animations, ask development to respect it.

Ask for it like this

Add the animation but respect prefers-reduced-motion. When someone has "reduce motion" enabled in their OS, turn the animation off or minimise it.

10

Easing

이징

When this comes up

"The movement feels mechanical"

The acceleration curve of a movement. Real objects do not move at a constant speed, which is why easing is what makes motion feel natural.

See it Try clicking

Top: linear · bottom: ease-out. The lower one feels more natural.

Easy to get wrong

ease-out — quick to start, slow to stop — is the safest choice for UI. Constant speed (linear) feels mechanical and belongs to things like loading spinners.

Ask for it like this

Change the easing to ease-out. Linear feels mechanical. Keep linear only for continuously rotating things like loading spinners.

11

Micro-interaction

마이크로 인터랙션

When this comes up

"It feels a bit plain — add some detail"

A very small unit of response: the heart that pops when you like something, the toggle that glides across.

See it Try clicking
Try pressing it
Easy to get wrong

It changes nothing functionally but creates the impression of a well-made product. Put it everywhere, though, and the screen turns restless. Save it for moments that should feel like an accomplishment.

Ask for it like this

Add a micro-interaction to the like button — the heart grows slightly and settles back when pressed. Apply it only to this button, not to every element.

12

Drag & Drop

드래그 앤 드롭

When this comes up

"Let people drag to reorder" — a request that raises the quote.

Picking an element up and dropping it somewhere else. Used for reordering, file upload and kanban boards.

See it Try clicking
To do
Design review
API integration
Done
Screen specs

Try dragging an item. (Mouse only — touch devices need a separate implementation.)

Easy to get wrong

Harder to build than it looks, so the quote goes up. On touch it also collides with scrolling and needs separate handling. Accessibility requires an alternative (up/down buttons) alongside dragging.

Ask for it like this

Let people reorder the list by drag and drop. It has to work on mobile touch, and provide "move up / move down" buttons as well for keyboard users.

13

Swipe

스와이프

When this comes up

"Let people swipe to delete"

Pushing across the screen with a finger.

See it Try clicking
Delete
Details of the meeting schedule

In reality this is a finger pushing to the left.

Easy to get wrong

It is a hidden gesture, so discoverability is poor. Anything reachable only by swiping is invisible to first-time users. Always provide another route — a button or a menu.

Ask for it like this

Reveal a delete button when a list item is swiped left. Since swiping is hard to discover, also put Delete in each item's More menu.

14

Long Press

롱프레스 · 길게 누르기

When this comes up

"Show a menu when you press and hold"

Holding an element down to reveal a hidden menu.

See it Try clicking
Press and hold this box for over 0.7 seconds
The hidden menu appeared
Easy to get wrong

Like swipe, discoverability is very low. Use it for secondary functions only; never hide a core feature behind it. There is no real desktop equivalent (right-click is closest), so it is rare on the web.

Ask for it like this

Open a context menu on long press, but offer the same actions from a visible button as well. Most people never find functions available only by long press.

15

Pull to Refresh

풀 투 리프레시

When this comes up

"Make it refresh when you pull down like an app" — a request that needs care on the web.

Pulling the screen down to refresh. The standard pattern in mobile apps.

See it Try clicking
Refreshing…
Easy to get wrong

On the mobile web it collides with the browser's own refresh gesture. Asked for this on a web project, explain the difficulty and the side effects first.

Ask for it like this

On mobile web, pull-to-refresh can conflict with the browser's built-in gesture. How about a refresh button at the top instead? It is possible if it is essential, but it adds effort.

16

Parallax

패럴랙스

When this comes up

"Make the background move separately as you scroll" — on brand sites.

An effect where background and foreground move at different speeds while scrolling, creating a sense of depth.

See it Try clicking
Background — moves slowly
Foreground content — moves at normal speed.

Try scrolling.

The background lags behind.

That difference in speed creates the sense of depth.
Easy to get wrong

Striking on a brand site, but heavy on performance and capable of causing motion sickness. It suits products built to deliver information poorly. It affects the quote too, so agree it early.

Ask for it like this

Apply parallax to the hero section only. It is performance-heavy, so do not apply it page-wide, and disable it when prefers-reduced-motion is set.

Related terms
17

Debounce · Throttle

디바운스 · 스로틀

When this comes up

"Search is firing far too many server requests"

Techniques for grouping rapid input to cut the number of operations. Debounce waits until things stop and runs once; throttle runs once per fixed interval.

See it Try clicking
✗ No debounce

L→Lo→Lon→Lond … 4 requests fired

✓ 0.3s debounce

After typing stops, "London" sends just 1 request

The search box on this site is debounced too, incidentally.

Easy to get wrong

Without debounce on autocomplete, every keystroke hits the server — four characters, four requests. Writing "search 0.3 seconds after typing stops" into the spec removes the ambiguity.

Ask for it like this

Debounce the search input by 0.3 seconds so requests only fire once typing stops. Apply throttling to scroll events.

Related terms
18

Optimistic UI

옵티미스틱 UI

When this comes up

"Make the like button respond instantly"

Updating the screen first, assuming success without waiting for the server, and rolling back on failure.

See it Try clicking
128 people like this

The number changes the instant you press; saving to the server happens afterwards.

Easy to get wrong

This is why like buttons feel instant. It improves perceived speed a lot, but you must design how it rolls back on failure. Never use it for things that cannot be undone, such as payment.

Ask for it like this

Make the like button optimistic — update the screen immediately and handle the server request behind it. On failure, revert to the original state and show a toast.

Related terms
19

Lazy Loading

지연 로딩

When this comes up

"The page is too slow" — on image-heavy pages.

Loading only what is on screen now, and fetching the rest as scrolling brings it closer.

See it Try clicking
✓ Already loaded (visible on screen)
✓ Already loaded (visible on screen)
↓ Loads once scrolling brings it closer
Easy to get wrong

It improves first-load speed considerably on image-heavy pages. But scroll fast and you see images arriving late, so ask for the space to be reserved in advance or the layout will jump.

Ask for it like this

Apply lazy loading to list images. Reserve the image dimensions (width/height) up front so the layout does not shift as they load, and exclude images visible in the first screen.