Animated Skeleton Loaders using CSS Keyframes
Learn animated skeleton loaders using css keyframes with this comprehensive guide containing source code.
Table of Contents
Welcome to this tutorial on Animated Skeleton Loaders using CSS Keyframes.
HTML Structure
<div class="skeleton-container">
<div class="skeleton-card">
<div class="skeleton skeleton-avatar"></div>
<div class="skeleton-content">
<div class="skeleton skeleton-text skeleton-title"></div>
<div class="skeleton skeleton-text"></div>
<div class="skeleton skeleton-text"></div>
</div>
</div>
<div class="skeleton-card">
<div class="skeleton skeleton-image"></div>
<div class="skeleton-content">
<div class="skeleton skeleton-text skeleton-title"></div>
<div class="skeleton skeleton-text"></div>
</div>
</div>
</div>
CSS Styling
body { margin: 0; padding: 0; display: flex; justify-content: center; align-items: center; min-height: 100vh; background-color: #f3f4f6; }
.skeleton-container {
display: flex;
flex-direction: column;
gap: 20px;
width: 100%;
max-width: 500px;
}
.skeleton-card {
background: white;
padding: 20px;
border-radius: 10px;
box-shadow: 0 4px 10px rgba(0,0,0,0.05);
display: flex;
gap: 20px;
align-items: center;
}
.skeleton-card:nth-child(2) {
flex-direction: column;
align-items: flex-start;
}
/* Base Skeleton Styling */
.skeleton {
background-color: #e2e5e7;
background-image: linear-gradient(
90deg,
rgba(255, 255, 255, 0),
rgba(255, 255, 255, 0.5),
rgba(255, 255, 255, 0)
);
background-size: 200px 100%;
background-repeat: no-repeat;
border-radius: 4px;
display: inline-block;
line-height: 1;
width: 100%;
animation: shimmer 1.5s infinite linear;
}
/* Specific Sizes */
.skeleton-avatar {
width: 60px;
height: 60px;
border-radius: 50%;
flex-shrink: 0;
}
.skeleton-image {
width: 100%;
height: 200px;
border-radius: 8px;
}
.skeleton-content {
width: 100%;
display: flex;
flex-direction: column;
gap: 10px;
}
.skeleton-text {
height: 12px;
width: 100%;
}
.skeleton-title {
height: 16px;
width: 60%;
margin-bottom: 5px;
}
.skeleton-text:last-child {
width: 80%;
}
@keyframes shimmer {
0% { background-position: -200px 0; }
100% { background-position: calc(200px + 100%) 0; }
}
JavaScript Logic
// Skeleton loaders are pure CSS! No JS needed.