Skeleton Screens
Card, list, avatar, and text skeleton loading states.
Text & Paragraph Skeleton
<div class="uk-sk-text sk-pulse">
<div class="uk-sk-bar" style="width: 40%; height: 20px; margin-bottom: 1.5rem;"></div>
<div class="uk-sk-bar" style="width: 100%;"></div>
<div class="uk-sk-bar" style="width: 92%;"></div>
<div class="uk-sk-bar" style="width: 96%;"></div>
<div class="uk-sk-bar" style="width: 75%; margin-bottom: 0;"></div>
</div>
<style>
.uk-sk-bar {
height: 12px;
background: #e2e8f0;
border-radius: 4px;
margin-bottom: 0.75rem;
}
.sk-pulse .uk-sk-bar {
animation: sk-pulse 1.5s cubic-bezier(0.4, 0, 0.6, 1) infinite;
}
@keyframes sk-pulse {
0%, 100% { opacity: 1; }
50% { opacity: .4; }
}
</style>
User Profile Skeleton
<div class="uk-sk-profile sk-pulse">
<div class="uk-sk-avatar" style="width: 64px; height: 64px;"></div>
<div class="uk-sk-info">
<div class="uk-sk-bar" style="width: 50%; height: 16px; margin-bottom: 0.5rem;"></div>
<div class="uk-sk-bar" style="width: 35%; height: 12px; margin-bottom: 0;"></div>
</div>
<div class="uk-sk-btn" style="width: 80px;"></div>
</div>
<style>
.uk-sk-profile {
display: flex;
align-items: center;
gap: 1rem;
}
.uk-sk-avatar {
border-radius: 50%;
background: #e2e8f0;
flex-shrink: 0;
}
.uk-sk-info { flex: 1; text-align: left; }
.uk-sk-bar {
height: 12px;
background: #e2e8f0;
border-radius: 4px;
margin-bottom: 0.75rem;
}
.uk-sk-btn {
height: 32px;
background: #e2e8f0;
border-radius: 0.4rem;
}
.sk-pulse .uk-sk-avatar,
.sk-pulse .uk-sk-bar,
.sk-pulse .uk-sk-btn {
animation: sk-pulse 1.5s infinite;
}
</style>
Card Skeleton
<div class="uk-sk-card sk-pulse">
<div class="uk-sk-card-img"></div>
<div class="uk-sk-card-body">
<div class="uk-sk-bar" style="width: 80%; height: 18px; margin-bottom: 0.75rem;"></div>
<div class="uk-sk-bar" style="width: 100%; margin-bottom: 0.5rem;"></div>
<div class="uk-sk-bar" style="width: 90%; margin-bottom: 1.5rem;"></div>
<div class="uk-sk-card-footer">
<div class="uk-sk-avatar" style="width: 32px; height: 32px;"></div>
<div class="uk-sk-bar" style="width: 40%; margin-bottom: 0;"></div>
</div>
</div>
</div>
<style>
.uk-sk-card-img {
height: 160px;
background: #e2e8f0;
}
.uk-sk-card-body { padding: 1.25rem; }
.uk-sk-bar {
height: 12px;
background: #e2e8f0;
border-radius: 4px;
}
.uk-sk-avatar {
border-radius: 50%;
background: #e2e8f0;
}
.uk-sk-card-footer {
display: flex;
align-items: center;
gap: 0.75rem;
}
.uk-sk-card-footer .uk-sk-bar { flex: 1; }
.sk-pulse .uk-sk-card-img,
.sk-pulse .uk-sk-bar,
.sk-pulse .uk-sk-avatar {
animation: sk-pulse 1.5s infinite;
}
</style>
List View Skeleton
<div class="uk-sk-list sk-pulse">
<div class="uk-sk-list-item">
<div class="uk-sk-avatar"></div>
<div class="uk-sk-list-content">
<div class="uk-sk-bar" style="width: 60%; height: 14px; margin-bottom: 0.5rem;"></div>
<div class="uk-sk-bar" style="width: 85%; margin-bottom: 0;"></div>
</div>
</div>
<!-- repeat 2 more times -->
</div>
<style>
.uk-sk-list-item {
display: flex;
gap: 1rem;
padding: 1rem;
border-bottom: 1px solid #f1f5f9;
}
.uk-sk-list-item:last-child { border-bottom: 0; }
.uk-sk-avatar {
background: #e2e8f0;
border-radius: 0.5rem;
flex-shrink: 0;
}
.uk-sk-list-content { flex: 1; padding-top: 2px; }
.uk-sk-bar {
height: 12px;
background: #e2e8f0;
border-radius: 4px;
}
.sk-pulse .uk-sk-avatar,
.sk-pulse .uk-sk-bar {
animation: sk-pulse 1.5s infinite;
}
</style>
Table Skeleton
<div class="uk-sk-table sk-pulse">
<div class="uk-sk-table-head">
<div class="uk-sk-bar" style="width: 25%;"></div>
<div class="uk-sk-bar" style="width: 25%;"></div>
<div class="uk-sk-bar" style="width: 25%;"></div>
<div class="uk-sk-bar" style="width: 15%;"></div>
</div>
<div class="uk-sk-table-row">
<div class="uk-sk-bar" style="width: 80%;"></div>
<div class="uk-sk-bar" style="width: 60%;"></div>
<div class="uk-sk-bar" style="width: 70%;"></div>
<div class="uk-sk-bar" style="width: 40%;"></div>
</div>
</div>
<style>
.uk-sk-table-head,
.uk-sk-table-row {
display: flex;
gap: 1.5rem;
padding: 1rem;
border-bottom: 1px solid #f1f5f9;
}
.uk-sk-table-head {
background: #f8fafc;
}
.uk-sk-table-row:last-child { border-bottom: 0; }
.uk-sk-bar {
height: 12px;
background: #e2e8f0;
border-radius: 4px;
}
.sk-pulse .uk-sk-bar { animation: sk-pulse 1.5s infinite; }
</style>
Wave Animation Skeleton
<div class="uk-sk-wave">
<div class="uk-sk-bar" style="width: 40%; height: 20px; margin-bottom: 1.5rem;"></div>
<div class="uk-sk-bar" style="width: 100%;"></div>
<div class="uk-sk-bar" style="width: 92%;"></div>
<div class="uk-sk-bar" style="width: 96%;"></div>
<div class="uk-sk-bar" style="width: 75%; margin-bottom: 0;"></div>
</div>
<style>
.uk-sk-bar {
height: 12px;
background: #e2e8f0;
border-radius: 4px;
margin-bottom: 0.75rem;
position: relative;
overflow: hidden;
}
.uk-sk-wave .uk-sk-bar::after {
content: '';
position: absolute;
inset: 0;
transform: translateX(-100%);
background: linear-gradient(90deg, transparent, rgba(255,255,255,0.6), transparent);
animation: sk-wave 1.6s infinite;
}
@keyframes sk-wave {
100% { transform: translateX(100%); }
}
</style>