纯CSS实现圆形旋转渐变加载动画
本文介绍了一个纯CSS实现的圆形旋转加载动画。通过两个渐变半圆形块和居中遮罩的组合,配合@keyframes旋转动画,创建出简洁优雅的加载效果。关键代码包括.loading-box容器、.loading-top/.loading-bottom半圆形渐变块和.mark内圈遮罩,无需第三方库即可实现持续转圈动画。这种轻量级方案适合日常项目开发,能有效提升用户体验。
最终效果
在日常项目开发中,我们经常需要用到加载动画来提升用户体验。今天分享一个纯CSS实现的圆形旋转加载动画,不仅简洁优雅,而且无需引入任何第三方库。
先看最终效果,此处为静态图,实际加载动画表现为一个橙色渐变的圆形不停旋转,中间有白色遮罩形成内圈,视觉层次感丰富。

实现思路解析
通过组合两个半圆形的渐变背景块,模拟出转动的视觉效果,并使用@keyframes配合transform: rotate()实现无限旋转动画。中间添加一个白色遮罩,增强整体视觉层次感。
-
双半圆渐变叠加
将加载动画分成上下两个半圆形,每个半圆用线性渐变背景表现颜色的渐变和层次。上半部分渐变带有透明度变化,下半部分颜色更饱和,配合旋转产生动态效果。 -
中心白色遮罩
为了避免整体看起来太单调和厚重,在圆形中心添加一个白色半透明圆形遮罩,制造空心效果,提升美感。 -
无限旋转动画
通过CSS的@keyframes,对加载容器执行持续旋转变换,实现无间断的动画循环。



HTML结构
- .loading-box 是动画的整体容器,负责圆形外观和旋转动画。
- .loading-top 和 .loading-bottom 分别为上下两个半圆,承担渐变色表现。
- .mark 作为中间的遮罩,形成内圈效果。
<div class="loading-box">
<div class="mark"></div>
<div class="loading-top"></div>
<div class="loading-bottom"></div>
</div>
CSS样式
- .loading-box设定宽高相等,圆角50%保证为圆形,overflow: hidden确保半圆形内容不会溢出容器边界。
- 两个半圆的高度各占一半,上半部分颜色透明度稍低,配合渐变制造光影变化,下半部分颜色饱和,增加视觉冲击力。
- .mark绝对定位居中,大小为容器的75%,形成一个白色内圈,视觉上产生空间感。
- 通过@keyframes loading,实现了一个2秒周期线性无限旋转动画,顺时针旋转一圈。
.loading-box {
width: 80px;
height: 80px;
border-radius: 50%;
overflow: hidden;
position: relative;
animation: loading 2s linear infinite;
}
.loading-top {
width: 100%;
height: 50%;
background: linear-gradient(to right, rgba(255, 77, 0, 0.5) 0%, rgba(255, 77, 0, 0.5) 10%, #ffffff 100%);
}
.loading-bottom {
width: 100%;
height: 50%;
background: linear-gradient(to right, rgba(255, 77, 0, 0.5) 0%, rgba(255, 77, 0, 0.5) 10%, rgba(255, 77, 0) 100%);
}
.mark {
width: 75%;
height: 75%;
border-radius: 50%;
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
background-color: #ffffff;
}
@keyframes loading {
0% {
transform: rotate(0deg);
}
100% {
transform: rotate(-360deg);
}
}
完整代码
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<style>
.loading-box {
width: 80px;
height: 80px;
border-radius: 50%;
overflow: hidden;
position: relative;
animation: loading 2s linear infinite;
}
.loading-top {
width: 100%;
height: 50%;
background: linear-gradient(to right, rgba(255, 77, 0, 0.5) 0%, rgba(255, 77, 0, 0.5) 10%, #ffffff 100%);
}
.loading-bottom {
width: 100%;
height: 50%;
background: linear-gradient(to right, rgba(255, 77, 0, 0.5) 0%, rgba(255, 77, 0, 0.5) 10%, rgba(255, 77, 0) 100%);
}
.mark {
width: 75%;
height: 75%;
border-radius: 50%;
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
background-color: #ffffff;
}
@keyframes loading {
0% {
transform: rotate(0deg);
}
100% {
transform: rotate(-360deg);
}
}
</style>
</head>
<body>
<div class="loading-box">
<div class="mark"></div>
<div class="loading-top"></div>
<div class="loading-bottom"></div>
</div>
</body>
</html>
火山引擎开发者社区是火山引擎打造的AI技术生态平台,聚焦Agent与大模型开发,提供豆包系列模型(图像/视频/视觉)、智能分析与会话工具,并配套评测集、动手实验室及行业案例库。社区通过技术沙龙、挑战赛等活动促进开发者成长,新用户可领50万Tokens权益,助力构建智能应用。
更多推荐
所有评论(0)