home / skills / dylantarre / animation-principles / micro-interactions

micro-interactions skill

/skills/01-by-domain/micro-interactions

This skill helps design micro-interactions by applying Disney's animation principles to small UI feedback moments for more engaging interfaces.

npx playbooks add skill dylantarre/animation-principles --skill micro-interactions

Review the files below or copy the command above to add this skill to your agents.

Files (1)
SKILL.md
4.5 KB
---
name: micro-interactions
description: Use when designing small UI feedback moments like button states, toggles, form validation, loading indicators, or notification badges.
---

# Micro-interaction Animation

Apply Disney's 12 animation principles to small UI feedback moments and interface details.

## Quick Reference

| Principle | Micro-interaction Implementation |
|-----------|--------------------------------|
| Squash & Stretch | Button press compression, toggle bounce |
| Anticipation | Hover state hints, pre-click feedback |
| Staging | Focus attention on active element |
| Straight Ahead / Pose to Pose | Progress vs state changes |
| Follow Through / Overlapping | Ripple effects, settling motion |
| Slow In / Slow Out | Snappy but smooth transitions |
| Arc | Toggle switches, circular menus |
| Secondary Action | Icons respond to parent state |
| Timing | 100-300ms for most interactions |
| Exaggeration | Clear but not distracting |
| Solid Drawing | Consistent transform behavior |
| Appeal | Delightful, purposeful feedback |

## Principle Applications

**Squash & Stretch**: Buttons compress slightly on press (scaleY: 0.95). Toggle thumbs squash when hitting bounds. Notification badges bounce on update. Keep subtle—this is UI, not cartoon.

**Anticipation**: Hover states prepare for click. Buttons lift/grow slightly before press animation. Draggable items elevate on grab start. Loading spinners wind up before spinning.

**Staging**: Active form field clearly distinguished. Error states demand attention. Success confirmations are unmistakable. One interaction feedback at a time.

**Straight Ahead vs Pose to Pose**: Progress indicators animate continuously (straight ahead). Checkboxes snap between states (pose to pose). Combine: loading indicator ends with state-change snap.

**Follow Through & Overlapping**: Ripple effects expand past tap point. Toggle switches overshoot then settle. Checkmarks draw with slight delay after box fills. Menu items stagger in.

**Slow In / Slow Out**: Quick ease-out for responsive feel. 100ms with ease-out feels instant. Avoid linear—looks broken. Snappy entrance, gentle settling.

**Arc**: Toggle switches travel in slight arc. Circular action buttons expand radially. Dropdown carets rotate smoothly. Menu items can follow curved path.

**Secondary Action**: Icon changes color as button state changes. Badge count updates with parent notification. Helper text appears as input focuses. Shadow responds to elevation.

**Timing**: Immediate feedback: 50-100ms. Standard transitions: 100-200ms. Complex micro-interactions: 200-300ms. Anything longer feels sluggish for small UI.

**Exaggeration**: Enough to notice, not enough to distract. Error shakes: 3-5px, not 20px. Success scales: 1.05-1.1, not 1.5. Subtle but unmistakable.

**Solid Drawing**: Transform origin matters—buttons scale from center, tooltips from pointer. Consistent behavior across similar elements. Maintain visual integrity during animation.

**Appeal**: Micro-interactions add personality without overwhelming. Users should feel the interface is responsive and alive. Small delights build into overall experience quality.

## Component Patterns

### Button States
```css
.button {
    transition: transform 100ms ease-out,
                box-shadow 100ms ease-out;
}
.button:hover {
    transform: translateY(-1px);
    box-shadow: 0 2px 8px rgba(0,0,0,0.15);
}
.button:active {
    transform: translateY(0) scale(0.98);
    box-shadow: 0 1px 2px rgba(0,0,0,0.1);
}
```

### Toggle Switch
```css
.toggle-thumb {
    transition: transform 200ms cubic-bezier(0.34, 1.56, 0.64, 1);
}
.toggle-thumb.active {
    transform: translateX(20px);
}
```

### Checkbox
```css
.checkmark {
    stroke-dasharray: 20;
    stroke-dashoffset: 20;
    transition: stroke-dashoffset 200ms ease-out 50ms;
}
.checkbox:checked + .checkmark {
    stroke-dashoffset: 0;
}
```

## Timing Reference

| Interaction | Duration | Easing |
|-------------|----------|--------|
| Hover | 100ms | ease-out |
| Click/tap | 100ms | ease-out |
| Toggle | 150-200ms | spring/elastic |
| Checkbox | 150ms | ease-out |
| Focus ring | 100ms | ease-out |
| Tooltip show | 150ms | ease-out |
| Tooltip hide | 100ms | ease-in |
| Badge update | 200ms | elastic |
| Form error | 200ms | ease-out |

## Best Practices

1. Every interactive element needs feedback
2. Disabled states: no animation, reduced opacity
3. Group related feedback together
4. Don't animate on every change—filter unnecessary updates
5. Test without animation—functionality shouldn't depend on it
6. Respect `prefers-reduced-motion`

Overview

This skill applies Disney's 12 animation principles to micro-interactions in user interfaces. It focuses on small feedback moments — button states, toggles, badges, loading indicators, and form validation — to make interfaces feel responsive, clear, and delightful. Use it to design consistent, purposeful motion that improves usability without distracting users.

How this skill works

The skill maps each animation principle to practical UI patterns and timing guidelines. It inspects interaction types (hover, click, toggle, badge update, focus, error) and suggests transforms, easings, durations, and sequencing (anticipation, follow-through, overlap). It also provides component patterns and accessibility considerations like prefers-reduced-motion.

When to use it

  • Designing button hover/press states and touch feedback
  • Creating toggle, checkbox, or switch animations
  • Animating loading indicators, progress, and state transitions
  • Updating notification badges or count changes
  • Providing form validation, error shakes, and success confirmations

Best practices

  • Give immediate feedback: 50–100ms for instant response, 100–200ms for standard transitions
  • Keep exaggeration subtle: small scale/offsets that are noticeable but not distracting
  • Group related feedback and avoid animating every change
  • Respect accessibility: no motion dependence and honor prefers-reduced-motion
  • Use consistent transform origins and easing across similar components

Example use cases

  • Button press compresses (scaleY ~0.95) with 100ms ease-out and shadow change
  • Toggle thumb moves with a spring curve and slight overshoot, settling in 150–200ms
  • Checkbox draws its checkmark using stroke-dashoffset with a 150–200ms delay
  • Badge count updates with an elastic bounce around 200ms
  • Form error performs a small 3–5px shake with 200ms ease-out

FAQ

How long should a micro-interaction last?

Keep most micro-interactions between 100–200ms; instant feedback can be 50–100ms and complex sequences up to 300ms.

When should I avoid animation?

Avoid animation for disabled states, when it interferes with clarity, or when users prefer reduced motion. Also skip nonessential animations on frequent updates.