You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用纯CSS实现简单圆形倒计时动画

纯CSS实现圆形倒计时动画的最简方案

实现思路

完全不需要SCSS的变量、循环等预编译能力,仅靠原生CSS属性和动画就能实现,核心逻辑如下:

  • 基础结构只需要3层DOM:外层圆形外壳、左右两个半圆遮罩、中间白色小圆(用来遮挡中心区域,形成环形进度条效果)
  • 动画逻辑:先转动右侧遮罩180度,转满之后再转动左侧遮罩180度,刚好覆盖完整的倒计时周期,不需要复杂的角度计算
  • 所有参数直接在CSS属性里修改即可,适配不同时长、尺寸、样式的需求

完整代码示例

HTML结构

<div class="countdown-circle">
  <div class="mask right"></div>
  <div class="mask left"></div>
  <div class="inner-circle">
    <span class="time-text">10</span>
  </div>
</div>

CSS样式

/* 外层圆形容器 */
.countdown-circle {
  position: relative;
  width: 200px;
  height: 200px;
  border-radius: 50%;
  background-color: #e0e0e0; /* 倒计时环形背景色 */
  overflow: hidden;
}
/* 通用半圆遮罩样式 */
.mask {
  position: absolute;
  top: 0;
  width: 50%;
  height: 100%;
  background-color: #2196f3; /* 进度条颜色 */
  transform-origin: right center;
}
/* 右侧遮罩,先执行转动动画 */
.mask.right {
  right: 0;
  animation: rotate-right 10s linear forwards;
}
/* 左侧遮罩,等右侧转满180度后再执行转动 */
.mask.left {
  left: 0;
  transform: rotate(180deg);
  animation: rotate-left 10s linear forwards;
  animation-delay: 10s;
}
/* 中间白色小圆,遮挡中心区域形成环形效果 */
.inner-circle {
  position: absolute;
  top: 10%;
  left: 10%;
  width: 80%;
  height: 80%;
  border-radius: 50%;
  background-color: #fff;
  display: flex;
  align-items: center;
  justify-content: center;
}
/* 倒计时数字样式,用steps动画实现数字跳变 */
.time-text {
  font-size: 48px;
  font-weight: bold;
  color: #333;
  animation: count-num 1s steps(1, end) 10 forwards;
}
.time-text::before {
  content: "10";
}

/* 右侧遮罩转动动画 */
@keyframes rotate-right {
  to { transform: rotate(180deg); }
}
/* 左侧遮罩转动动画 */
@keyframes rotate-left {
  to { transform: rotate(360deg); }
}
/* 数字跳变动画 */
@keyframes count-num {
  10% { content: "9"; }
  20% { content: "8"; }
  30% { content: "7"; }
  40% { content: "6"; }
  50% { content: "5"; }
  60% { content: "4"; }
  70% { content: "3"; }
  80% { content: "2"; }
  90% { content: "1"; }
  100% { content: "0"; }
}

参数调整说明

  • 修改倒计时总时长:同步调整右侧遮罩的动画时长、左侧遮罩的动画时长和延迟值、数字动画的总时长即可,比如要做30秒倒计时,就把三个值都改成30s,再对应调整数字动画的关键帧即可
  • 修改环形粗细:调整.inner-circle的top/left/width/height百分比即可,百分比越小环形越粗
  • 不需要数字展示:直接删掉.time-text相关的DOM和样式即可,不影响环形动画的正常运行
  • 修改配色:直接替换外层容器的背景色、遮罩的进度色即可

内容的提问来源于stack exchange,提问作者AndWie

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 11:54:03