پیشنمایش زنده
کد HTML
<div class="ui-loader timeline" role="status" aria-label="Loading">
<div class="tl-head">
<div class="sk tlt"></div>
<div class="chip">Rendering</div>
</div>
<div class="tracks">
<div class="track">
<span class="clip c1"></span><span class="clip c2"></span
><span class="clip c3"></span>
<span class="playhead" aria-hidden="true"></span>
</div>
<div class="track dim">
<span class="clip c2"></span><span class="clip c3"></span
><span class="clip c1"></span>
<span class="playhead" aria-hidden="true"></span>
</div>
</div>
<div class="meter">
<span class="meter-fill"></span>
<span class="meter-glint" aria-hidden="true"></span>
</div>
</div>
کد CSS
.timeline {
width: 380px;
border-radius: 20px;
border: 1px solid rgba(255, 255, 255, 0.1);
background: rgba(255, 255, 255, 0.04);
box-shadow: 0 28px 80px rgba(0, 0, 0, 0.55);
overflow: hidden;
backdrop-filter: blur(12px);
-webkit-backdrop-filter: blur(12px);
font-family: ui-sans-serif, system-ui;
}
.tl-head {
display: flex;
align-items: center;
gap: 12px;
padding: 14px;
border-bottom: 1px solid rgba(255, 255, 255, 0.08);
background: linear-gradient(
180deg,
rgba(255, 255, 255, 0.06),
rgba(255, 255, 255, 0.03)
);
}
.sk.tlt {
height: 12px;
width: 46%;
border-radius: 999px;
background: rgba(255, 255, 255, 0.06);
border: 1px solid rgba(255, 255, 255, 0.07);
position: relative;
overflow: hidden;
}
.sk.tlt::before {
content: "";
position: absolute;
inset: -40% -60%;
background: linear-gradient(
110deg,
transparent 0%,
rgba(255, 255, 255, 0.1) 22%,
rgba(255, 255, 255, 0.2) 30%,
transparent 44%
);
transform: translateX(-60%);
animation: shimmer3 1.15s cubic-bezier(0.2, 0.8, 0.2, 1) infinite;
mix-blend-mode: screen;
}
.chip {
margin-left: auto;
font-size: 12px;
padding: 8px 10px;
border-radius: 999px;
border: 1px solid rgba(255, 255, 255, 0.1);
background: rgba(255, 255, 255, 0.04);
color: rgba(255, 255, 255, 0.72);
}
.tracks {
padding: 14px;
display: grid;
gap: 10px;
}
.track {
height: 20px;
border-radius: 12px;
border: 1px solid rgba(255, 255, 255, 0.08);
background: rgba(255, 255, 255, 0.03);
position: relative;
overflow: hidden;
display: flex;
align-items: center;
gap: 8px;
padding: 0 10px;
}
.track.dim {
opacity: 0.75;
}
.clip {
height: 10px;
border-radius: 999px;
border: 1px solid rgba(255, 255, 255, 0.1);
background: rgba(255, 255, 255, 0.06);
}
.c1 {
width: 70px;
}
.c2 {
width: 44px;
}
.c3 {
width: 92px;
}
.playhead {
position: absolute;
top: -10px;
bottom: -10px;
width: 2px;
left: -10%;
background: linear-gradient(
180deg,
rgba(110, 231, 255, 0),
rgba(110, 231, 255, 0.85),
rgba(176, 140, 255, 0.75),
rgba(110, 231, 255, 0)
);
box-shadow: 0 0 18px rgba(110, 231, 255, 0.22);
animation: playhead 1.25s cubic-bezier(0.2, 0.8, 0.2, 1) infinite;
}
.meter {
height: 10px;
margin: 0 14px 14px;
border-radius: 999px;
position: relative;
overflow: hidden;
background: rgba(255, 255, 255, 0.06);
border: 1px solid rgba(255, 255, 255, 0.09);
}
.meter-fill {
position: absolute;
inset: 0;
background: linear-gradient(
90deg,
rgba(110, 231, 255, 0),
rgba(110, 231, 255, 0.55),
rgba(176, 140, 255, 0.55),
rgba(110, 231, 255, 0)
);
transform: translateX(-70%);
animation: flow3 1.05s cubic-bezier(0.2, 0.8, 0.2, 1) infinite;
}
.meter-glint {
position: absolute;
inset: -30% -40%;
background: linear-gradient(
110deg,
transparent 0%,
rgba(255, 255, 255, 0.12) 22%,
rgba(255, 255, 255, 0.28) 28%,
transparent 40%
);
transform: translateX(-55%);
animation: glint3 1.05s cubic-bezier(0.2, 0.8, 0.2, 1) infinite;
mix-blend-mode: screen;
}
@keyframes playhead {
0% {
left: -10%;
opacity: 0;
}
15% {
opacity: 1;
}
100% {
left: 110%;
opacity: 0;
}
}
@keyframes shimmer3 {
to {
transform: translateX(60%);
}
}
@keyframes flow3 {
0% {
transform: translateX(-75%);
opacity: 0.55;
}
50% {
opacity: 1;
}
100% {
transform: translateX(75%);
opacity: 0.55;
}
}
@keyframes glint3 {
0% {
transform: translateX(-60%);
opacity: 0;
}
20% {
opacity: 1;
}
100% {
transform: translateX(60%);
opacity: 0;
}
}