Progress Circle
Animated circular progress indicator with percentage display.
progress
circle
animation
percentage
Preview
Loading preview...
HTML
<div class="progress-container">
<div class="progress-circle">
<svg class="progress-ring" viewBox="0 0 120 120">
<circle class="progress-ring-bg" cx="60" cy="60" r="50"></circle>
<circle class="progress-ring-fill" cx="60" cy="60" r="50"></circle>
</svg>
<div class="progress-percentage">70</div>
</div>
<div class="progress-label">Project Progress</div>
</div>
CSS
.progress-circle {
position: relative;
width: 120px;
height: 120px;
margin: 0 auto;
}
.progress-ring {
width: 100%;
height: 100%;
transform: rotate(-90deg);
}
.progress-ring-bg {
fill: none;
stroke: #e5e7eb;
stroke-width: 8;
}
.progress-ring-fill {
fill: none;
stroke: #667eea;
stroke-width: 8;
stroke-linecap: round;
stroke-dasharray: 314;
stroke-dashoffset: 314;
animation: progress-fill 2s ease-out forwards;
}
.progress-percentage {
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
font-size: 24px;
font-weight: bold;
color: #1f2937;
}
.progress-label {
text-align: center;
margin-top: 16px;
color: #6b7280;
font-size: 14px;
font-weight: 500;
}
.progress-container {
display: flex;
flex-direction: column;
align-items: center;
padding: 24px;
background: white;
border-radius: 16px;
box-shadow: 0 4px 12px rgba(0, 0, 0, 0.1);
max-width: 200px;
margin: 0 auto;
}
@keyframes progress-fill {
from {
stroke-dashoffset: 314;
}
to {
stroke-dashoffset: 94.2; /* 70% progress */
}
}
.progress-percentage::after {
content: '%';
font-size: 16px;
color: #6b7280;
}