⏳ 4 Free CSS Loaders & Spinners

Pure CSS loading animations – copy, paste, and customize. No JavaScript required.

🎨 Live Demos
Each loader works immediately. Click copy → paste into your project → done.

🌀 Classic Spinner

Understanding the Mechanics of the Classic Spinner

The Classic Spinner is the baseline component for indicating real-time data streaming or background computations. It relies heavily on geometric precision. By establishing a symmetrical block width and height of 50px, alongside a standard border-radius: 50%, the underlying browser viewport compiles a mathematically perfect circular mask. The actual rotational movement does not translate multiple elements; instead, it uses a solid foundational light track (#e2e8f0) accented by a single high-contrast primary accent border (#3b82f6).When the browser parses the continuous loop initialized by the @keyframes spin directive, it applies hardware-accelerated rendering rules to smoothly swing the transformation coordinates from 0% to 100% up to a complete 360deg rotation. To make this component fit smaller layouts seamlessly—like nested buttons or miniature dashboard panels—developers can scale down the layout variables proportionally while maintaining a steady linear infinite timing rhythm to prevent sudden layout skips.

<div class="spinner"></div>
<style>
.spinner {
  width: 50px; height: 50px;
  border: 4px solid #e2e8f0;
  border-top: 4px solid #3b82f6;
  border-radius: 50%;
  animation: spin 1s linear infinite;
}
@keyframes spin { 100% { transform: rotate(360deg); } }
</style>

⚫ Pulse Dots

Designing Staggered Animation Cycles with Pulse Dots

For softer, modern interactive frameworks such as chat windows, message streams, or conversational AI interfaces, the Pulse Dots layout acts as an optimal micro-interaction. This UI model coordinates a horizontal row of multiple standard inline spans structured cleanly inside a flex wrapper (display: flex; gap: 8px;). Rather than shifting spatial layout coordinates across the X or Y axis, this indicator communicates activity by altering two safe rendering properties simultaneously: visual scale() transformations and element opacity settings.The unique layout charm of this loader relies entirely on rhythmic staggering. By using native CSS rules, developers apply an incremental animation-delay property across each subsequent dot element. When the animation runs, the elements shift fluidly between a minimized scale of 0.6 at half opacity and a fully realized scale of 1 at absolute opacity. This subtle wave effect lowers user abandonment rates by creating an intuitive feeling of momentum and ongoing server communication.

<div class="pulse-dots">
  <span></span><span></span><span></span>
</div>
<style>
.pulse-dots { display: flex; gap: 8px; }
.pulse-dots span {
  width: 12px; height: 12px;
  background: #3b82f6; border-radius: 50%;
  animation: pulse 1.4s ease-in-out infinite;
}
@keyframes pulse {
  0%,80%,100% { transform: scale(0.6); opacity: 0.5; }
  40% { transform: scale(1); opacity: 1; }
}
</style>

🦴 Skeleton Card

Engineering Shimmering Page Skeleton Screen Mockups

The Skeleton Card represents an essential structural evolution in contemporary user experience design. Instead of showing a traditional abstract indicator while your page processes extensive data requests, skeleton modules build a placeholder blueprint that maps out the incoming content layout. This design framework structures empty blocks—like avatar placeholders (.skeleton-avatar) and content text lines (.skeleton-line)—using a neutral background base token (#e2e8f0).The animation layer drops standard rotational rules to focus strictly on an endless shimmering wave illusion. The @keyframes shimmer loop transitions the container elements between an opacity floor of 0.3 and a ceiling of 1 across an effortless 1.5s cycle. This persistent rhythmic shift tricks the human brain into experiencing significantly reduced perceived load times. This makes it a critical performance optimization strategy for social feeds, dashboard cards, and media grids.

<div class="skeleton-card">
  <div class="skeleton-avatar"></div>
  <div class="skeleton-line"></div>
</div>
<style>
.skeleton-avatar, .skeleton-line {
  background: #e2e8f0;
  animation: shimmer 1.5s infinite;
}
@keyframes shimmer {
  0% { opacity: 0.3; } 50% { opacity: 1; } 100% { opacity: 0.3; }
}
</style>

📊 Animated Progress Bar

Linear Layout Management using the Animated Progress Bar

The Animated Progress Bar provides an exceptional linear tracking option ideal for file file system syncs, image uploads, or multi-step checkout processes. The visual structure relies on a parent tracking path track container (.progress-bar-container) set to a rounded height profile of 8px. Inside this static track sits the active percentage indicators element (.progress-bar), which expands dynamically along the horizontal field.The specialized @keyframes progress rule controls an elastic acceleration arc. The bar element initializes at an absolute width constraint of 0%, surges mid-cycle up to 70%, and accelerates smoothly to terminate completely at 100% before immediately resetting back to zero. This continuous loop utilizes an ease-in-out timing metric to make the linear motion feel organic, responsive, and highly fluid to the end user.

<div class="progress-bar-container">
  <div class="progress-bar"></div>
</div>
<style>
.progress-bar-container {
  background: #e2e8f0; border-radius: 20px; height: 8px;
}
.progress-bar {
  width: 0%; height: 8px;
  background: #3b82f6; border-radius: 20px;
  animation: progress 2s ease-in-out infinite;
}
@keyframes progress {
  0% { width: 0%; } 50% { width: 70%; } 100% { width: 100%; }
}
</style>

🚀 Need More Loaders?

Get 15+ advanced loaders (skeleton tables, infinite scroll spinners, SVG loaders) in the Pro Pack.

Get Pro Pack – $7 →

❤️ Found This Useful?

These free snippets took time to create. A small coffee keeps them coming.

☕ Buy Me a Coffee
← Back to all snippets