Unique Circular Progressbar - MeggiTools
Run
Toggle Theme
Share Link
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Unique Circular Progressbar</title> <style> body { display: flex; justify-content: center; align-items: center; height: 100vh; background: linear-gradient(135deg, #f5f7fa, #c3cfe2); font-family: 'Arial', sans-serif; } .progress-container { position: relative; width: 200px; height: 200px; } .progress-circle { width: 100%; height: 100%; border-radius: 50%; background: conic-gradient(#4caf50 var(--progress), #d3d3d3 0); animation: rotate 2s linear infinite; } .progress-circle:before { content: '🚀'; position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%); font-size: 40px; animation: bounce 2s infinite; } .progress-circle:after { content: attr(data-progress) '%'; position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%) scale(0); font-size: 20px; color: #333; animation: scaleUp 2s infinite; } @keyframes rotate { 0% { transform: rotate(0deg); } 100% { transform: rotate(360deg); } } @keyframes bounce { 0%, 20%, 50%, 80%, 100% { transform: translate(-50%, -50%) translateY(0); } 40% { transform: translate(-50%, -50%) translateY(-30px); } 60% { transform: translate(-50%, -50%) translateY(-15px); } } @keyframes scaleUp { 0%, 20%, 50%, 80%, 100% { transform: translate(-50%, -50%) scale(1); } 40% { transform: translate(-50%, -50%) scale(1.2); } 60% { transform: translate(-50%, -50%) scale(1.1); } } </style> </head> <body> <div class="progress-container"> <div class="progress-circle" data-progress="0" style="--progress: 0;"></div> </div> <script> function updateProgress(progress) { const circle = document.querySelector('.progress-circle'); circle.setAttribute('data-progress', progress); circle.style.setProperty('--progress', progress + '%'); } let progress = 0; setInterval(() => { if (progress < 100) { progress += 1; updateProgress(progress); } }, 100); </script> </body> </html>