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;
}

© 2025 AnyCSS. All rights reserved.