Loader Progress Bar
Đây là thành phần trình tải thực hiện ba loại hoạt ảnh trên thanh tiến trình: chuyển màu, sọc và xung bằng CSS thuần túy.
HTMLCSS
Xem trước
3 loại hình ảnh động thanh tiến trình. Không cần JavaScript, triển khai CSS thuần túy.
độ dốc + ánh sáng lung linh
thanh sọc
thanh xung
Trường hợp sử dụng và tính năng
- Hiển thị tiến trình tải lên tệp: Có thể được sử dụng làm thanh giả để thể hiện tiến trình bằng hoạt ảnh CSS.
- 3 kiểu mẫu hoạt hình: Bạn có thể lựa chọn theo từng chủ đề.
- Triển khai CSS thuần túy: Không cần khung. Hoàn thành chỉ với
@keyframes. - Chiều cao có thể được điều chỉnh tự do: Chỉ cần thay đổi
heightcủa.pb-track.
Điểm thiết kế và UX
- Thanh gradient: Đạt được hiệu ứng lung linh với hoạt ảnh
background-size: 200%vàbackground-position. - Thanh sọc: Biểu thị các sọc chảy với hoạt ảnh
repeating-linear-gradientvàbackground-position. - Thanh xung: Một thanh chuyển động xuất hiện trong quá trình xử lý tải cao với
opacitykhông liên tục.
Cách tùy chỉnh
Thay đổi chiều cao:
.pb-track { height: 12px; } /* dày */
.pb-track { height: 4px; } /* mỏng */
Thay đổi màu gradient:
.pb-gradient .pb-fill {
background: linear-gradient(90deg, #06b6d4, #3b82f6, #8b5cf6);
}
Mã triển khai
<div class="pb-preview-bg">
<div class="pb-item">
<div class="pb-label">độ dốc + ánh sáng lung linh</div>
<div class="pb-track"><div class="pb-fill pb-gradient-fill"></div></div>
</div>
<div class="pb-item">
<div class="pb-label">thanh sọc</div>
<div class="pb-track"><div class="pb-fill pb-striped-fill"></div></div>
</div>
<div class="pb-item">
<div class="pb-label">thanh xung</div>
<div class="pb-track"><div class="pb-fill pb-pulse-fill"></div></div>
</div>
</div>
<style>
`
.pb-preview-bg {
width: 100%;
max-width: 400px;
display: flex;
flex-direction: column;
gap: 2rem;
}
.pb-item {
display: flex;
flex-direction: column;
gap: 0.5rem;
}
.pb-label {
color: #fff;
font-size: 0.9rem;
font-family: sans-serif;
}
.pb-track {
width: 100%;
height: 8px;
background: rgba(255,255,255,0.1);
border-radius: 999px;
overflow: hidden;
}
.pb-fill {
height: 100%;
border-radius: 999px;
width: 0%;
}
.pb-gradient-fill {
background: linear-gradient(90deg, #6366f1, #8b5cf6, #ec4899);
background-size: 200% 100%;
animation: pb-slide 2s ease infinite, pb-shimmer 2s linear infinite;
}
.pb-striped-fill {
background-color: #3b82f6;
background-image: repeating-linear-gradient(
45deg,
rgba(255, 255, 255, 0.15) 0px,
rgba(255, 255, 255, 0.15) 10px,
transparent 10px,
transparent 20px
);
background-size: 28px 28px;
animation: pb-slide 2.5s ease infinite, pb-stripe 1s linear infinite;
}
.pb-pulse-fill {
background: #10b981;
animation: pb-slide 3s ease infinite, pb-pulse 1.5s ease-in-out infinite alternate;
}
@keyframes pb-slide {
0% { width: 0%; }
80%, 100% { width: 100%; }
}
@keyframes pb-shimmer {
0% { background-position: 200% 0; }
100% { background-position: -200% 0; }
}
@keyframes pb-stripe {
0% { background-position: 0 0; }
100% { background-position: 28px 0; }
}
@keyframes pb-pulse {
0% { opacity: 0.6; }
100% { opacity: 1; box-shadow: 0 0 8px 2px rgba(16, 185, 129, 0.5); }
}
`
</style> Trạng thái tương thích với trình duyệt
| Trình duyệt | Trạng thái tương thích |
|---|---|
| Chrome 43+ | ✅ Hoàn toàn tương thích |
| Firefox 16+ | ✅ Hoàn toàn tương thích |
| Safari 9+ | ✅ Hoàn toàn tương thích |
| Cạnh 79+ | ✅ Hoàn toàn tương thích |