Loading States

dylantarre/animation-principles/skills/05-by-animation-type/loading-states

by dylantarre83597134ba8fNo license99 starsListed Oct 8, 2026Updated Oct 8, 2026Repository updated 9 months ago

Use when indicating progress or waiting - spinners, progress bars, skeleton screens, shimmer effects, or any animation showing the system is working.

Instructions onlyDesign & Creative
AI-generated overview

Guidance for designing loading indicators such as spinners, progress bars and skeleton screens using animation principles.

What it does
This skill provides design guidance for loading states, applying Disney's 12 animation principles to spinners, progress bars, skeleton screens and shimmer effects. It gives timing recommendations for appear delays, minimum display durations and animation cycles, plus CSS implementation patterns for shimmer, spinners, progress fills and loading-to-content transitions. It also lists key rules such as delaying spinner appearance and respecting reduced-motion preferences.
When to use it
Use it when indicating progress or waiting in an interface, such as when adding spinners, progress bars, skeleton screens or shimmer effects. It suits situations where an animation should show that the system is working.
Requirements
No scripts or special tooling; it is instructions only. Applying the CSS patterns assumes a project that supports CSS animations.

Loading State Animations

Apply Disney's 12 principles to communicate system activity.

Principle Application

Squash & Stretch: Progress indicators can pulse/breathe to show life. Slight scale oscillation (0.98-1.02).

Anticipation: Show loading state immediately on action. Don't wait for slow response to show spinner.

Staging: Loading indicators appear where content will be. Skeleton screens match final layout.

Straight Ahead vs Pose-to-Pose: Design loading as a sequence: instant indicator → progress → completion → content.

Follow Through & Overlapping: Loading fades as content enters. Overlap the transition by 100ms.

Slow In/Slow Out: Progress bars ease-in-out between known percentages. Indeterminate uses smooth oscillation.

Arcs: Circular spinners follow true circular paths. Avoid jerky rotation.

Secondary Action: Skeleton shimmer + subtle pulse. Multiple signals reinforce "loading."

Timing:

  • Show spinner after 200ms delay (avoid flash for fast loads)
  • Minimum display: 500ms (prevent jarring flash)
  • Skeleton shimmer cycle: 1500-2000ms

Exaggeration: Keep minimal - loading shouldn't distract, just reassure.

Solid Drawing: Skeletons should match content proportions. Wrong shapes break the illusion.

Appeal: Loading should feel optimistic, not tedious. Smooth motion suggests progress.

Timing Recommendations

Loading TypeAppear DelayMin DisplayAnimation Cycle
Spinner200ms500ms700-800ms
Progress Bar0ms-smooth fill
Skeleton0ms500ms1500ms shimmer
Button Spinner0ms400ms600ms
Full Page100ms800ms1000ms

Implementation Patterns

css
/* Skeleton shimmer */.skeleton {  background: linear-gradient(    90deg,    #e0e0e0 0%,    #f0f0f0 50%,    #e0e0e0 100%  );  background-size: 200% 100%;  animation: shimmer 1500ms ease-in-out infinite;}
@keyframes shimmer {  0% { background-position: 200% 0; }  100% { background-position: -200% 0; }}
/* Spinner with smooth rotation */.spinner {  animation: spin 700ms linear infinite;  opacity: 0;  animation: fade-in 200ms 200ms ease-out forwards, spin 700ms linear infinite;}
/* Progress bar with easing */.progress-fill {  transition: width 300ms cubic-bezier(0.4, 0, 0.2, 1);}

Loading-to-Content Transition

css
.content-enter {  animation: content-reveal 300ms ease-out forwards;}
@keyframes content-reveal {  from {    opacity: 0;    transform: translateY(10px);  }  to {    opacity: 1;    transform: translateY(0);  }}

Key Rules

  1. Delay spinner appearance by 200ms to avoid flash
  2. Keep loading visible minimum 500ms once shown
  3. Skeleton shapes must match real content dimensions
  4. Transition smoothly from loading to content - never pop
  5. Respect prefers-reduced-motion - show static indicator instead

Source and attribution

Source:dylantarre/animation-principlesinskills/05-by-animation-type/loading-statesat commit8359713

License: No license

Content belongs to its original authors. SourceWeft indexes it from a public repository.

Report or request removal