Motion DesignMicro-interactionsAnimationInteraction DesignUI Physics

The Case Against Fake Realism: Why Micro-Interactions Need Physical Constraints

Linear easing is the uncanny valley of UI. Learn physics-based motion principles: ease-out (deceleration), ease-in (acceleration), spring effects. Includes complete modal animation breakdown, CSS/JavaScript implementation, easing curve guide, anti-patterns, and why motion design should be invisible.

Simanta Parida
Simanta ParidaProduct Designer at Siemens
22 min read
Share:

The Case Against Fake Realism: Why Micro-Interactions Need Physical Constraints

Watch this:

A button appears on screen. It fades in from 0% to 100% opacity in exactly 200 milliseconds. Every millisecond, the opacity increases by the exact same amount.

0ms: 0% 50ms: 25% 100ms: 50% 150ms: 75% 200ms: 100%

Perfect mathematical precision. Perfectly linear. Perfectly... wrong.

Why?

Because nothing in the physical world moves like that.

Objects accelerate. They decelerate. They have mass. They experience friction. They overshoot and settle. They respond to force.

But that button? It just... appeared. Like it was beamed into existence at a constant rate.

And your brain noticed. Not consciously, maybe. But it noticed.

Because linear motion is the uncanny valley of UI animation.


The Uncanny Valley of Motion

You've heard of the uncanny valley in robotics and CGI: when something looks almost human, but not quite, it triggers discomfort.

The same thing happens with motion.

When UI elements move with linear easing—starting and stopping instantly, moving at a constant speed—they feel:

  • Mechanical
  • Jarring
  • Unnatural
  • Noticeable (in a bad way)

Here's why:

Your Brain is a Physics Engine

Humans have spent millions of years observing how objects move in the physical world:

  • A ball you throw accelerates quickly, then slows as gravity and air resistance act on it
  • A door you push swings fast at first, then slows as friction brings it to rest
  • A book you drop accelerates as it falls, then stops abruptly when it hits the table

Your brain has internalized these patterns. You don't think about physics—you feel it.

So when a UI element violates these physical laws, your brain registers it as wrong.

Not in words. Just in feeling: "This doesn't look right."

The Problem with Default Easing

Most design tools and CSS libraries default to linear easing or no easing at all.

Linear easing:

Element starts at 0% speed → Instantly jumps to 100% speed → Maintains 100% speed → Instantly stops at 0% speed

Problems:

  1. No acceleration: The element starts at full speed immediately (violates inertia)
  2. No deceleration: The element stops instantly (violates momentum)
  3. Constant velocity: The element never speeds up or slows down (nothing in nature moves like this)

The result: The animation feels robotic, abrupt, and draws attention to itself (when it should be invisible).


Why Physics Matters in UI

Here's the counterintuitive truth:

The goal of motion design isn't to be noticed. It's to be invisible.

When motion follows physical laws, users don't think about the animation. They think about the content.

Example:

You tap a button. A modal appears.

With linear easing:

  • User thinks: "That transition felt weird. Did something break?"
  • User is distracted from the modal content

With physics-based easing:

  • User thinks: "Okay, here's the form I need to fill out."
  • User focuses on the task

Physics Creates Familiarity

Physical motion is predictable because we've experienced it our entire lives.

When UI mimics physics:

  • Cognitive load decreases (brain doesn't have to "figure out" what's happening)
  • Perceived speed increases (natural motion feels faster than mechanical motion)
  • Interactions feel responsive (the UI "reacts" like a physical object)

Physics Communicates Meaning

Different types of motion communicate different things:

Motion TypePhysical AnalogueWhat It Communicates
Ease-out (fast start, slow stop)Pushing an object"This element is appearing and settling into place"
Ease-in (slow start, fast stop)Pulling an object toward you"This element is being dismissed or removed"
Spring (slight overshoot, then settle)Bouncing ball, spring"This element has substance and weight"
Linear (constant speed)Robotic arm"This is mechanical, not organic" (rarely desired)

The Principles of Physical Motion in UI

Let's break down the core principles of physics-based motion design.

Principle 1: Ease-Out (Deceleration)

Definition: The element starts fast and slows down as it approaches its destination.

Physical Analogue:

  • A ball rolling on a surface (friction slows it down)
  • A door swinging closed (friction at the hinges)
  • A car braking (applying force to slow down)

When to Use: This is your default easing for 80% of animations.

Use ease-out when:

  • Elements are appearing (modals, dropdowns, tooltips)
  • Elements are moving into position (cards sliding in, content expanding)
  • User-initiated actions (button press, form submission)

Why It Works: Ease-out feels responsive and intentional. The element reacts quickly to user input (fast start), but settles gently (slow stop), which:

  • Prevents jarring stops
  • Gives the user time to track the motion
  • Feels like the UI "listens" to the user

CSS Implementation:

/* Standard ease-out */
transition: all 300ms ease-out;

/* Custom cubic-bezier (more control) */
transition: all 300ms cubic-bezier(0, 0, 0.2, 1);

Timing:

  • Fast actions: 100-200ms
  • Medium actions: 200-400ms
  • Slow actions: 400-600ms

Example: Button Hover State

.button {
  background-color: blue;
  transform: scale(1);
  transition: all 150ms ease-out;
}

.button:hover {
  background-color: darkblue;
  transform: scale(1.05);
}

What happens:

  1. User hovers over button
  2. Button immediately starts scaling up and changing color (fast start)
  3. Button decelerates as it reaches 1.05 scale and final color (slow stop)
  4. Feels responsive and smooth

Principle 2: Ease-In (Acceleration)

Definition: The element starts slow and speeds up as it moves.

Physical Analogue:

  • An object falling due to gravity (starts slow, speeds up)
  • A car accelerating from a stop

When to Use: Use ease-in sparingly (maybe 10% of animations).

Use ease-in when:

  • Elements are disappearing or being dismissed
  • Elements are exiting the screen
  • You want to create dramatic emphasis

Why It Works: Ease-in creates a sense of finality. The element lingers briefly (slow start), then quickly exits (fast finish), which:

  • Gives users a moment to register the action
  • Creates a sense of completion ("it's gone")
  • Feels less abrupt than instant removal

CSS Implementation:

/* Standard ease-in */
transition: all 200ms ease-in;

/* Custom cubic-bezier */
transition: all 200ms cubic-bezier(0.4, 0, 1, 1);

Example: Modal Close Animation

.modal.closing {
  opacity: 1;
  transform: scale(1);
  transition: all 200ms ease-in;
}

.modal.closed {
  opacity: 0;
  transform: scale(0.95);
}

What happens:

  1. User clicks close button
  2. Modal starts fading/shrinking slowly (slow start)
  3. Modal accelerates and vanishes quickly (fast finish)
  4. Feels like the modal is "being pulled away"

Principle 3: Ease-In-Out (S-Curve)

Definition: The element starts slow, speeds up in the middle, then slows down at the end.

Physical Analogue:

  • A train leaving a station and arriving at the next station
  • A car accelerating from one stop sign to another

When to Use: Use ease-in-out for transitions between two states where neither is dominant (about 10% of animations).

Use ease-in-out when:

  • Moving an element from one position to another (neither "appearing" nor "disappearing")
  • Looping animations
  • Smooth, continuous motion

CSS Implementation:

/* Standard ease-in-out */
transition: all 400ms ease-in-out;

/* Custom cubic-bezier */
transition: all 400ms cubic-bezier(0.4, 0, 0.2, 1);

Example: Drawer Sliding Out

.drawer {
  transform: translateX(-100%);
  transition: transform 300ms ease-in-out;
}

.drawer.open {
  transform: translateX(0);
}

Principle 4: The Spring Effect (Advanced)

Definition: The element moves to its target position, slightly overshoots, then settles back.

Physical Analogue:

  • A spring bouncing when compressed or stretched
  • A diving board after someone jumps off
  • A rubber band snapping back into place

When to Use: Use springs for playful, physical interactions (maybe 5% of animations, but high impact).

Use springs when:

  • You want to emphasize that an element has "weight" or "substance"
  • You want to create a playful, friendly feeling
  • You're designing for mobile (touch interactions benefit from spring feedback)

Why It Works: Springs make interfaces feel alive and responsive. The overshoot-and-settle creates a sense that:

  • The UI is reacting to user input (not just executing commands)
  • Elements have physical properties (mass, tension)
  • The interaction is tactile

Implementation (CSS Custom Spring):

/* Spring-like effect using cubic-bezier */
transition: all 500ms cubic-bezier(0.68, -0.55, 0.265, 1.55);

Implementation (JavaScript Spring Library):

Using libraries like Framer Motion (React) or Popmotion:

import { motion } from 'framer-motion';

<motion.div
  initial={{ scale: 0 }}
  animate={{ scale: 1 }}
  transition={{
    type: "spring",
    stiffness: 260,
    damping: 20
  }}
>
  Modal Content
</motion.div>

Parameters:

  • Stiffness: How "bouncy" the spring is (higher = more bounce)
  • Damping: How quickly the spring settles (lower = more oscillation)

Example Values:

EffectStiffnessDampingUse Case
Gentle bounce10010Modals, tooltips
Moderate bounce26020Buttons, cards
High bounce40030Playful interactions, game UIs
No bounce100100Smooth, no overshoot

Application: The Perfect Modal Transition

Let's design a complete modal animation using physics-based motion.

Scenario

User clicks "Add Payment Method" button → Modal appears with a form.

Requirements

  1. Modal should feel responsive (appears quickly)
  2. Modal should feel substantial (has weight)
  3. Modal should not feel jarring (smooth motion)
  4. Overlay should fade in smoothly

The Animation Sequence

Step 1: Overlay Fade-In

.overlay {
  opacity: 0;
  transition: opacity 300ms ease-out;
}

.overlay.visible {
  opacity: 0.5;
}

Why ease-out?

  • The overlay is appearing
  • Ease-out feels responsive (fast start) and smooth (slow stop)

Step 2: Modal Scale and Fade-In (Spring Effect)

<motion.div
  className="modal"
  initial={{
    opacity: 0,
    scale: 0.9,
    y: 20
  }}
  animate={{
    opacity: 1,
    scale: 1,
    y: 0
  }}
  transition={{
    type: "spring",
    stiffness: 300,
    damping: 25,
    opacity: { duration: 0.2 }
  }}
>
  {/* Modal content */}
</motion.div>

What's happening:

  1. Opacity: 0 → 1 (200ms, linear)

    • Modal fades in quickly
    • Opacity doesn't need easing (fade is already smooth)
  2. Scale: 0.9 → 1 (spring)

    • Modal starts slightly smaller
    • Springs up to full size with slight overshoot
    • Communicates "substance" and "weight"
  3. Y: 20px → 0 (spring)

    • Modal starts slightly below its final position
    • Springs up into place
    • Reinforces the "popping up" feeling

Total duration: ~400-500ms (spring settles)

Perceived speed: Feels faster than 400ms because of the quick start


Step 3: Modal Close (Ease-In)

<motion.div
  className="modal"
  exit={{
    opacity: 0,
    scale: 0.95,
    y: 10
  }}
  transition={{
    duration: 0.2,
    ease: "easeIn"
  }}
>
  {/* Modal content */}
</motion.div>

What's happening:

  1. Opacity: 1 → 0 (200ms, ease-in)

    • Modal starts fading slowly
    • Accelerates and vanishes quickly
  2. Scale: 1 → 0.95 (200ms, ease-in)

    • Modal shrinks slightly
    • Feels like it's being "pulled away"
  3. Y: 0 → 10px (200ms, ease-in)

    • Modal drops slightly as it fades
    • Adds directionality to the exit

Total duration: 200ms

Why faster than open?

  • Exits should be quick (user wants to move on)
  • Opens should be smooth (user needs to orient)

The Complete Code

import { motion, AnimatePresence } from 'framer-motion';

function Modal({ isOpen, onClose, children }) {
  return (
    <AnimatePresence>
      {isOpen && (
        <>
          {/* Overlay */}
          <motion.div
            className="overlay"
            initial={{ opacity: 0 }}
            animate={{ opacity: 0.5 }}
            exit={{ opacity: 0 }}
            transition={{ duration: 0.3, ease: "easeOut" }}
            onClick={onClose}
          />

          {/* Modal */}
          <motion.div
            className="modal"
            initial={{
              opacity: 0,
              scale: 0.9,
              y: 20
            }}
            animate={{
              opacity: 1,
              scale: 1,
              y: 0
            }}
            exit={{
              opacity: 0,
              scale: 0.95,
              y: 10
            }}
            transition={{
              type: "spring",
              stiffness: 300,
              damping: 25,
              opacity: { duration: 0.2 },
              exit: { duration: 0.2, ease: "easeIn" }
            }}
          >
            {children}
          </motion.div>
        </>
      )}
    </AnimatePresence>
  );
}

When to Break the Rules

Physics-based motion is a guideline, not a law. Sometimes you should deliberately violate physics for effect.

Break Physics When:

1. You Want to Create Surprise

Linear or sudden motion can jolt users into paying attention.

Example: Error messages that "pop" in instantly (no easing) to grab attention.

2. You Want to Communicate Urgency

Fast, aggressive motion signals importance.

Example: A timer running out uses linear motion to feel relentless.

3. You're Designing for Accessibility

Some users prefer reduced motion (prefers-reduced-motion media query).

@media (prefers-reduced-motion: reduce) {
  * {
    animation-duration: 0.01ms !important;
    transition-duration: 0.01ms !important;
  }
}

4. Performance is Critical

Complex spring animations can be expensive. On low-end devices, stick to simple ease-out.


Motion Design Anti-Patterns

❌ Anti-Pattern 1: Too Much Bounce

The Problem: Using high stiffness + low damping creates cartoony motion.

Example:

// TOO BOUNCY
transition: {
  type: "spring",
  stiffness: 600,
  damping: 10
}

The Fix: Increase damping to reduce oscillation.

// BETTER
transition: {
  type: "spring",
  stiffness: 300,
  damping: 25
}

❌ Anti-Pattern 2: Too Slow

The Problem: Making animations longer than 600ms feels sluggish.

The Rule:

  • Fast: 100-200ms
  • Medium: 200-400ms
  • Slow: 400-600ms
  • Never: >600ms (unless intentional, like a loading animation)

❌ Anti-Pattern 3: Animating Everything

The Problem: Every element bouncing, fading, and sliding creates chaos.

The Rule:

  • Animate one primary element per user action
  • Supporting elements should use subtle fades or instant changes
  • Not every state change needs an animation

❌ Anti-Pattern 4: Inconsistent Easing

The Problem: Using different easing curves for similar actions breaks patterns.

The Fix: Define a motion system with consistent easing curves:

/* Motion System */
--ease-out: cubic-bezier(0, 0, 0.2, 1);
--ease-in: cubic-bezier(0.4, 0, 1, 1);
--ease-in-out: cubic-bezier(0.4, 0, 0.2, 1);

/* Durations */
--duration-fast: 150ms;
--duration-medium: 300ms;
--duration-slow: 500ms;

Then use consistently:

.modal {
  transition: all var(--duration-medium) var(--ease-out);
}

Testing Your Motion Design

Here's how to evaluate if your animation feels "right":

1. The Slow-Motion Test

Slow down your animation 2-3x. Does the motion path make sense? Does it follow a logical curve?

Tools:

  • Chrome DevTools: Performance → Enable "Slow 3G" throttling
  • Reduce transition-duration values to see the motion more clearly

2. The Distraction Test

Ask: "Am I noticing the animation, or the content?"

  • Good: You don't notice the animation
  • Bad: The animation draws your eye away from the task

3. The Comparison Test

Compare your animation to similar products (especially Apple, Google, Stripe—they invest heavily in motion design).

Does yours feel as polished? If not, why?


Conclusion: Motion Design is Subconscious Communication

Here's the key insight:

Motion design shouldn't just be decoration. When it follows physical constraints, it becomes a powerful, subconscious communication tool.

Physics-based motion tells users:

  • This UI is responsive (fast start)
  • This element has substance (spring effect)
  • This action is complete (smooth stop)

It reduces cognitive load by matching users' lifetime of experience with physical objects.

And when done right, it's invisible. Users don't think about the animation—they focus on their task.

The next time you design a transition, ask:

  • How would this move in the real world?
  • What physical force would cause this motion?
  • Am I accelerating and decelerating naturally?

If you can answer those questions, you're not just animating. You're designing motion that feels right.


Want to learn more about interaction design and micro-interactions?


What are your favorite motion design examples? What tools do you use to implement physics-based animations?

Simanta Parida

About the Author

Simanta Parida is a Product Designer at Siemens, Bengaluru, specializing in enterprise UX and B2B product design. With a background as an entrepreneur, he brings a unique perspective to designing intuitive tools for complex workflows.

Connect on LinkedIn →

Sources & Citations

No external citations have been attached to this article yet.

Citation template: add 3-5 primary sources (research papers, standards, official docs, or first-party case data) with direct links.