使用conic-gradient制作加载进度圆环动画的核心是通过多层背景:radial-gradient“挖空”中心形成圆环,conic-gradient根据css变量绘制扇形进度;2. 通过@keyframes动画改变--current-progress变量实现动态填充效果;3. 动画可结合ease-in-out或cubic-bezier提升流畅度,多色渐变增强视觉层次;4. 需用javascript动态更新aria属性以保障可访问性;5. conic-gradient还可拓展用于饼图、颜色选择器、创意背景等场景,展现强大灵活性。该方案以简洁代码实现高性能、易维护的视觉效果,是进度环的理想选择。

使用CSS制作加载进度圆环动画,特别是利用
conic-gradient
conic-gradient
@keyframes
要实现一个基于
conic-gradient
首先,HTML部分可以非常简洁,一个
div
立即学习“前端免费学习笔记(深入)”;
<div class="loading-progress-ring">
<span class="progress-value">0%</span>
</div>接着是关键的CSS部分。这里我会用CSS变量来控制进度、尺寸和颜色,这样调整起来非常方便。
.loading-progress-ring {
/* 定义一些CSS变量,让样式调整更灵活 */
--current-progress: 0; /* 初始进度百分比 */
--ring-size: 150px; /* 圆环的整体尺寸 */
--ring-thickness: 12px; /* 圆环的厚度 */
--fill-color: #6a1b9a; /* 进度条的填充色,我喜欢紫色 */
--empty-color: #e0e0e0; /* 未填充部分的颜色 */
--text-color: #333; /* 文本颜色 */
--animation-duration: 2s; /* 动画时长 */
width: var(--ring-size);
height: var(--ring-size);
border-radius: 50%; /* 确保是圆形 */
display: flex;
align-items: center;
justify-content: center;
position: relative; /* 用于内部文本定位 */
overflow: hidden; /* 防止内容溢出,尽管在这里不那么关键 */
/*
* 核心魔法:使用多层背景。
* 第一层 (radial-gradient) 用来“挖空”中心,形成圆环的内边缘。
* 第二层 (conic-gradient) 才是真正的进度条。
*/
background:
/* 径向渐变,从中心向外扩散,形成一个透明的内圆,从而“挖空”圆环 */
radial-gradient(
circle at center,
white calc(50% - var(--ring-thickness)), /* 内圆的半径,比总半径小一个厚度 */
transparent calc(50% - var(--ring-thickness) + 1px) /* 确保边缘清晰 */
),
/* 锥形渐变,从0度开始,根据--current-progress变量绘制填充色 */
conic-gradient(
var(--fill-color) calc(var(--current-progress) * 1%), /* 进度填充色 */
var(--empty-color) calc(var(--current-progress) * 1%) /* 未填充色 */
);
/* 如果conic-gradient不支持,提供一个基础背景色 */
background-color: var(--empty-color);
/* 动画定义:驱动--current-progress变量从0到指定值 */
animation: fillProgress var(--animation-duration) linear forwards;
/*
* 实际项目中,--current-progress的值通常会通过JavaScript动态设置,
* 这里为了演示动画效果,直接在keyframes里定义。
*/
}
.loading-progress-ring .progress-value {
font-size: calc(var(--ring-size) / 4); /* 根据圆环大小调整字体 */
font-weight: bold;
color: var(--text-color);
z-index: 1; /* 确保文本在渐变之上 */
/*
* 动画监听:通过JS监听动画的每一帧,更新文本显示。
* 这种方式在CSS中无法直接实现,通常需要JavaScript。
* 这里只是一个占位符,实际动画过程中文本不会自动更新。
*/
}
/* 关键帧动画,控制进度变量的变化 */
@keyframes fillProgress {
from {
--current-progress: 0;
}
to {
--current-progress: 75; /* 示例:动画到75% */
}
}这段代码的核心在于
background
radial-gradient
conic-gradient
radial-gradient
conic-gradient
--current-progress
conic-gradient
谈到进度圆环,你可能会想到用SVG、或者多个
div
clip-path
conic-gradient
首先,
conic-gradient
相比之下,
linear-gradient
radial-gradient
linear-gradient
radial-gradient
conic-gradient
更重要的是,
conic-gradient
conic-gradient
一个能动的圆环固然好,但要让它看起来更“丝滑”、更有质感,还有些细节可以打磨。这不仅仅是技术上的优化,更是用户体验层面的考量。
一个很重要的点是动画的缓动函数(animation-timing-function
linear
ease-in-out
cubic-bezier()
再来,色彩的选择和过渡也能极大影响观感。如果你觉得单色填充太单调,可以在
conic-gradient
/* 示例:更复杂的conic-gradient,带多种颜色过渡 */
background:
radial-gradient(
circle at center,
white calc(50% - var(--ring-thickness)),
transparent calc(50% - var(--ring-thickness) + 1px)
),
conic-gradient(
#ff9a9e 0%, /* 起始颜色 */
#fad0c4 var(--current-progress), /* 填充色过渡 */
#ffb7b7 var(--current-progress), /* 另一种填充色,增加层次 */
#e0e0e0 100% /* 未填充色 */
);别忘了可访问性。对于屏幕阅读器用户来说,一个纯视觉的进度条是毫无意义的。在实际项目中,我们应该为进度环添加
aria-valuenow
aria-valuemin
aria-valuemax
aria-valuenow
最后,性能考量。虽然
conic-gradient
will-change: transform;
will-change: background;
conic-gradient
conic-gradient
最直观的延伸就是饼图(Pie Charts)。无论是静态的展示数据比例,还是动态的随着数据更新而变化,
conic-gradient
conic-gradient
再比如,颜色选择器。很多设计工具中的圆形颜色选择器,其核心就是一个巨大的
conic-gradient
此外,它在背景设计中也有独特表现。你可以用它来制作各种几何图案、抽象背景,甚至是模拟光线从中心向外扩散的效果。通过调整渐变的起始角度、颜色和颜色停止点,能够创造出非常丰富的视觉纹理。想象一下,一个网页背景由多个
conic-gradient
我甚至见过有人用
conic-gradient
mask
clip-path
总而言之,
conic-gradient
以上就是CSS怎样制作加载进度圆环动画?conic-gradient渐变的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号