css3写一个加载动画

简介: css3写一个加载动画

先制作一个正方形,让圆点在正方形的最外侧

<style>
body {
    margin: 0;
}
.loading {
    width: 200px;
    height: 200px;
    background: skyblue;
    margin: 100px auto 0px;
    position: relative;
}
.loading .item {
    width: 20px;
    height: 20px;
    border-radius: 50%;
    background: pink;
    position: absolute;
    /* left:50%是指的左边的点的位置在中间 第一个圆点在最顶部 */
    left: 50%;
    top: 0px;
    margin-left: -10px;
    /* 基准点 */
    transform-origin: 10px 100px;
}
//第二个圆点
.loading .item:nth-child(2) {
    transform: rotate(40deg);
}
//第三个圆点
.loading .item:nth-child(3) {
    transform: rotate(80deg);
}
</style>
<body>
    <div class="loading">
        <div class="item"></div>
        <div class="item"></div>
        <div class="item"></div>
        <div class="item"></div>
        <div class="item"></div>
        <div class="item"></div>
        <div class="item"></div>
        <div class="item"></div>
        <div class="item"></div>
    </div>
</body>

借助 rotate 让9个圆点在正方形的四周

<style>
    body {
        margin: 0;
    }
    .loading {
        width: 200px;
        height: 200px;
        background: skyblue;
        margin: 100px auto 0px;
        position: relative;
    }
    .loading .item {
        width: 20px;
        height: 20px;
        border-radius: 50%;
        background: pink;
        position: absolute;
        /* left:50%是指的左边的点值在中间 第一个圆点在最顶部 */
        left: 50%;
        top: 0px;
        margin-left: -10px;
        /* 基准点 */
        transform-origin: 10px 100px;
    }
    .loading .item:nth-child(2) {
        transform: rotate(40deg);
    }
    .loading .item:nth-child(3) {
        transform: rotate(80deg);
    }
    /* 以此类推 快速做出其他的圆点 */
    .loading .item:nth-child(4) {
        transform: rotate(120deg);
    }
    .loading .item:nth-child(5) {
        transform: rotate(160deg);
    }
    .loading .item:nth-child(6) {
        transform: rotate(200deg);
    }
    .loading .item:nth-child(7) {
        transform: rotate(240deg);
    }
    .loading .item:nth-child(8) {
        transform: rotate(280deg);
    }
    .loading .item:nth-child(9) {
        transform: rotate(320deg);
    }
</style>

优化代码

上面我们给每一个点都设置了旋转的角度。
这样觉得很low、都在重复。如果点很多,那不是要累死我们呀。
怎么解决这个问题了?我们可以使用css的变量来解决这个问题。
我们可以可以使用自定义属性来处理这个问题的。自定义属性是以"--"开头。

使用自定义属性"--" 来优化代码

<style>
body {
    margin: 0;
}
.loading {
    width: 200px;
    height: 200px;
    background: skyblue;
    margin: 100px auto 0px;
    position: relative;
}
.loading .item {
    width: 20px;
    height: 20px;
    border-radius: 50%;
    background: pink;
    position: absolute;
    /* left:50%是指的左边的点值在中间 第一个圆点在最顶部 */
    left: 50%;
    top: 0px;
    margin-left: -10px;
    /* 基准点 */
    transform-origin: 10px 100px;
    /* calc 函数可以进行运算*/
    transform: rotate(calc(var(--i)*40deg));
}
</style>
<div class="loading">
    <!-- 自定义属性是通过"--"来命名的 -->
    <div class="item" style="--i:0"></div>
    <div class="item" style="--i:1"></div>
    <div class="item" style="--i:2"></div>
    <div class="item" style="--i:3"></div>
    <div class="item" style="--i:4"></div>
    <div class="item" style="--i:5"></div>
    <div class="item" style="--i:6"></div>
    <div class="item" style="--i:7"></div>
    <div class="item" style="--i:8"></div>
</div>

让每个一个小圆点间隔一段时间亮起来

<style>
    body {
        margin: 0;
    }
    .loading {
        width: 200px;
        height: 200px;
        background: pink;
        margin: 100px auto 0px;
        position: relative;
    }
    .loading .item {
        width: 20px;
        height: 20px;
        border-radius: 50%;
        background: rgba(255, 255, 255, .2);
        position: absolute;
        /* left:50%是指的左边的点值在中间 第一个圆点在最顶部 */
        left: 50%;
        top: 0px;
        margin-left: -10px;
        /* 基准点 */
        transform-origin: 10px 100px;
        /* calc 函数可以进行运算*/
        transform: rotate(calc(var(--i)*40deg));
        /* 调用动画 */
        animation: loading 2s ease infinite;
    }
    @keyframes loading {
        0%,
        50% {
            background: rgba(255, 255, 255, .2);
        }
        50.5%,
        100% {
            background: #fff;
        }
    }
    .loading .item:nth-child(1) {
        animation-delay: 0s;
    }
    .loading .item:nth-child(2) {
        animation-delay: 0.111s;
    }
    .loading .item:nth-child(3) {
        animation-delay: 0.222s;
    }
    /* 以此类推 快速做出其他的圆点 */
    .loading .item:nth-child(4) {
        animation-delay: 0.333s;
    }
    .loading .item:nth-child(5) {
        animation-delay: 0.444s;
    }
    .loading .item:nth-child(6) {
        animation-delay: 0.555s;
    }
    .loading .item:nth-child(7) {
        animation-delay: 0.666s;
    }
    .loading .item:nth-child(8) {
        animation-delay: 0.777s;
    }
    .loading .item:nth-child(9) {
        animation-delay: 0.888s;
    }
</style>
</head>
<body>
<div class="loading">
    <!-- 自定义属性是通过"--"来命名的 -->
    <div class="item" style="--i:0"></div>
    <div class="item" style="--i:1"></div>
    <div class="item" style="--i:2"></div>
    <div class="item" style="--i:3"></div>
    <div class="item" style="--i:4"></div>
    <div class="item" style="--i:5"></div>
    <div class="item" style="--i:6"></div>
    <div class="item" style="--i:7"></div>
    <div class="item" style="--i:8"></div>
</div>
</body>

同样优化代码

<style>
body {
    margin: 0;
}
.loading {
    width: 200px;
    height: 200px;
    background: pink;
    margin: 100px auto 0px;
    position: relative;
}
.loading .item {
    width: 20px;
    height: 20px;
    border-radius: 50%;
    background: rgba(255, 255, 255, .2);
    position: absolute;
    /* left:50%是指的左边的点值在中间 第一个圆点在最顶部 */
    left: 50%;
    top: 0px;
    margin-left: -10px;
    /* 基准点 */
    transform-origin: 10px 100px;
    /* calc 函数可以进行运算*/
    transform: rotate(calc(var(--i)*40deg));
    /* 调用动画 */
    animation: loading 2s ease infinite;
    animation-delay: calc(var(--i) * 0.11s);
}
@keyframes loading {
    0%,
    50% {
        background: rgba(255, 255, 255, .2);
    }
    50.5%,
    100% {
        background: #fff;
    }
}
</style>
</head>
<body>
<div class="loading">
    <!-- 自定义属性是通过"--"来命名的 -->
    <div class="item" style="--i:0"></div>
    <div class="item" style="--i:1"></div>
    <div class="item" style="--i:2"></div>
    <div class="item" style="--i:3"></div>
    <div class="item" style="--i:4"></div>
    <div class="item" style="--i:5"></div>
    <div class="item" style="--i:6"></div>
    <div class="item" style="--i:7"></div>
    <div class="item" style="--i:8"></div>
</div>
</body>

遇见问题,这是你成长的机会,如果你能够解决,这就是收获。

相关文章
|
10月前
|
前端开发 算法 Java
【CSS】前端三大件之一,如何学好?从基本用法开始吧!(九):强势分析Animation动画各类参数;从播放时间、播放方式、播放次数、播放方向、播放状态等多个方面,完全了解CSS3 Animation
Animation属性 css3为Animation动画提供的几个属性如下: 属性名 属性值 animation-name 指定动画名称,该属性指定一个已有的关键帧定义。 animation-duration 指定动画持续时间。 animation-timing-funtion 指定动画变化速度。 animation-delay 指定动画延迟多长时间才开始执行。 animation-iteration-count 指定动画的循环执行次数。 animation:这是一个复合属性。
586 3
|
自然语言处理 前端开发 JavaScript
用 通义灵码 一键生成“水波纹按钮”,连 CSS 动画都不用自己写了!
通义灵码是一款智能编程辅助工具,它可以根据自然语言指令自动生成高质量的代码。例如,只需输入“生成一个按钮,点击时带水波纹动画,模拟 Material Ripple 效果”,它就能生成具备完整交互逻辑、CSS 动画和良好性能的按钮组件。不仅如此,它还支持拓展功能,如长按触发提示、添加图标等,并能自动优化样式适配不同场景。通过通义灵码,开发者可以大幅提升效率,专注于创意实现,而不必纠结于繁琐的代码细节。
|
前端开发 JavaScript
CSS 过渡和动画
CSS过渡和动画是用于为网页元素添加动态效果的两种重要技术
741 143
css3 svg制作404页面动画效果HTML源码
css3 svg制作404页面动画效果HTML源码
320 34
jQuery+CSS3实现404背景游戏动画源码
jQuery+CSS3实现404背景游戏动画源码
312 22
|
Web App开发 移动开发 JavaScript
纯CSS3+SVG实现的节日庆祝五彩纸屑动画效果源码
这是一款基于纯CSS3+SVG实现的节日庆祝五彩纸屑动画效果源码。画面中左下角是一个圆锥形礼炮卡通效果,呈现出节日庆祝时礼花爆破、五彩纸屑纷飞的动画特效。整体动画效果采用纯css3+svg实现,没有引入任何外部图形或js脚本元素。建议使用支持HTML5与css3效果较好的火狐(Firefox)或谷歌(Chrome)等浏览器预览本源码。
407 6
|
前端开发 JavaScript UED
CSS滚动效果和视差滚动的原理、应用及其对用户体验的影响。从平滑滚动到元素跟随,再到滚动触发动画
本文探讨了CSS滚动效果和视差滚动的原理、应用及其对用户体验的影响。从平滑滚动到元素跟随,再到滚动触发动画,这些效果增强了页面的吸引力和互动性。视差滚动通过不同层次元素的差异化移动,增加了页面的深度感和沉浸感。文章还讨论了实现方法、性能优化及案例分析,旨在为设计师和开发者提供实用指导。
544 7
|
前端开发 UED 开发者
CSS Sprites和图标字体在网页图标加载优化中的应用。CSS Sprites通过合并多图标减少HTTP请求,提升加载速度
本文探讨了CSS Sprites和图标字体在网页图标加载优化中的应用。CSS Sprites通过合并多图标减少HTTP请求,提升加载速度;图标字体则以字体形式呈现图标,便于调整样式。文章分析了两者的优缺点及应用场景,并提供了应用技巧和注意事项,旨在帮助开发者提升页面性能,改善用户体验。
301 5
纯css3实现的百分比渐变进度条加载动画源码
纯css3实现的百分比渐变进度条加载动画特效源码
337 31
纯css3加载loading发光变色动画代码
纯css3加载loading发光变色动画特效代码是一款基于css3 keyframes属性实现的发光变色圆点串联旋转loading加载动画
287 2

热门文章

最新文章

  • 1
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(九):强势分析Animation动画各类参数;从播放时间、播放方式、播放次数、播放方向、播放状态等多个方面,完全了解CSS3 Animation
    586
  • 2
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(八):学习transition过渡属性;本文学习property模拟、duration过渡时间指定、delay时间延迟 等多个参数
    444
  • 3
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(七):学习ransform属性;本文学习 rotate旋转、scale缩放、skew扭曲、tanslate移动、matrix矩阵 多个参数
    443
  • 4
    (CSS)使用Flex布局,帮助你快速了解各种基本的Flex布局属性以及帮你让元素快速达到布局中的指定位置!
    293
  • 5
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(六):全方面分析css的Flex布局,从纵、横两个坐标开始进行居中、两端等元素分布模式;刨析元素间隔、排序模式等
    566
  • 6
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(五):背景属性;float浮动和position定位;详细分析相对、绝对、固定三种定位方式;使用浮动并清除浮动副作用
    740
  • 7
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(四):元素盒子模型;详细分析边框属性、盒子外边距
    1447
  • 8
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(三):元素继承关系、层叠样式规则、字体属性、文本属性;针对字体和文本作样式修改
    321
  • 9
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(二):CSS伪类:UI伪类、结构化伪类;通过伪类获得子元素的第n个元素;创建一个伪元素展示在页面中;获得最后一个元素;处理聚焦元素的样式
    1174
  • 10
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(一):CSS发展史;CSS样式表的引入;CSS选择器使用,附带案例介绍
    518