Tools / UI Kit / Bootstrap / Skeleton Screens

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>