responsive-adaptive

dylantarre's avatarfrom dylantarre

Use when building context-dependent animations - duration that changes based on device, distance, user preference, or interaction context

⭐0stars🔀0forks📁View on GitHub🕐Updated Dec 30, 2025

When & Why to Use This Skill

This Claude skill enables the creation of context-aware animation systems that automatically adjust timing and duration based on device type, viewport size, travel distance, and user accessibility preferences. It bridges the gap between professional motion design principles and front-end implementation, ensuring UI animations feel natural and performant across all platforms.

Use Cases

  • Optimizing UI responsiveness by shortening animation durations on touch devices to meet user expectations for faster feedback.
  • Implementing distance-based timing logic using CSS variables or JavaScript to ensure elements maintain consistent perceived speed regardless of travel distance.
  • Ensuring web accessibility by automatically respecting 'prefers-reduced-motion' media queries to provide a comfortable experience for sensitive users.
  • Scaling complex motion effects like 'Squash & Stretch' or 'Anticipation' to fit different screen sizes without overwhelming the user interface.
  • Improving performance on low-power devices by automatically reducing animation complexity and 3D transforms.
nameresponsive-adaptive
descriptionUse when building context-dependent animations - duration that changes based on device, distance, user preference, or interaction context

Responsive & Adaptive Timing

Responsive timing adapts duration to context: device capability, travel distance, user preferences, and interaction type. One duration doesn't fit all situations.

Disney Principles for Adaptive Motion

Context-Aware Application

Squash & Stretch: Scale with device - more subtle on mobile (less screen real estate for deformation).

Anticipation: Shorter on touch devices - touch users expect faster response than mouse users.

Staging: Adapt to viewport - smaller screens need more focused staging, less simultaneous motion.

Straight Ahead/Pose to Pose: Same approach, scaled duration - poses stay, timing adjusts.

Follow Through: Proportional to distance - longer travel = more follow-through time.

Slow In/Slow Out: Adjust curve intensity - faster animations need sharper easing.

Arcs: Same paths, different speeds - arc shape remains, traversal time changes.

Secondary Action: Reduce on mobile - fewer simultaneous animations for performance.

Timing: THE adaptive variable - timing changes, principles stay.

Exaggeration: Less on smaller screens - proportional to viewport/element size.

Solid Drawing: Performance-aware - reduce 3D transforms on weaker devices.

Appeal: Context-appropriate - what feels right on desktop may feel slow on mobile.

Adaptive Strategies

Distance-Based Duration

/* Base duration for reference distance */
--base-duration: 300ms;
--base-distance: 100px;

/* Duration scales with distance */
/* 50px travel = 200ms, 200px travel = 450ms */
function getDuration(distance) {
  const baseDuration = 300;
  const baseDistance = 100;
  return Math.min(600, baseDuration * Math.sqrt(distance / baseDistance));
}

Device-Based Duration

/* Desktop - full duration */
.transition { transition-duration: 400ms; }

/* Tablet - slightly faster */
@media (max-width: 1024px) {
  .transition { transition-duration: 350ms; }
}

/* Mobile - faster for perceived responsiveness */
@media (max-width: 768px) {
  .transition { transition-duration: 250ms; }
}

Preference-Based Duration

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

/* Reduce motion, don't eliminate */
@media (prefers-reduced-motion: reduce) {
  .transition {
    transition-duration: 100ms;
    transform: none; /* Only opacity fades */
  }
}

Context Rules

Context Duration Adjustment
Touch device -25% from desktop
Small viewport -20% from desktop
Large travel distance +50% base
Small travel distance -30% base
User prefers reduced Instant or minimal
Low power mode -50% or disabled
High-frequency action Use minimum duration
First-time view Full duration
Repeat interaction Reduced duration

Implementation Pattern

:root {
  --duration-instant: 50ms;
  --duration-fast: 150ms;
  --duration-normal: 300ms;
  --duration-slow: 500ms;
}

@media (max-width: 768px) {
  :root {
    --duration-fast: 100ms;
    --duration-normal: 200ms;
    --duration-slow: 350ms;
  }
}

@media (prefers-reduced-motion: reduce) {
  :root {
    --duration-instant: 0ms;
    --duration-fast: 0ms;
    --duration-normal: 100ms;
    --duration-slow: 150ms;
  }
}

Key Insight

Great animation adapts like typography adapts - what works at one size/context may not work at another. Build systems, not fixed values. Test across contexts. Duration is a variable, not a constant.