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>

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

相关文章
|
21天前
|
前端开发 内存技术
CSS动画示例(上一篇是CSS过渡…)
CSS动画示例(上一篇是CSS过渡…)
32 1
|
5天前
|
前端开发
CSS属性涵盖了从文本样式到布局控制、从颜色处理到动画效果的各个方面
【5月更文挑战第31天】CSS属性涵盖了从文本样式到布局控制、从颜色处理到动画效果的各个方面
14 1
|
15天前
|
前端开发
前端 CSS 经典:SVG 描边动画
前端 CSS 经典:SVG 描边动画
23 0
|
18天前
|
前端开发 JavaScript
前端 css 经典:transition 过渡和 animation 动画
前端 css 经典:transition 过渡和 animation 动画
22 2
|
18天前
|
前端开发 算法
【css炫酷动画】让面试官眼前一亮的故障风格文字动画,3年Web前端开发工程师面试经验分享
【css炫酷动画】让面试官眼前一亮的故障风格文字动画,3年Web前端开发工程师面试经验分享
|
19天前
|
Web App开发 前端开发 iOS开发
CSS3 转换,深入理解Flutter动画原理,前端基础图形
CSS3 转换,深入理解Flutter动画原理,前端基础图形
|
21天前
|
前端开发 UED
【专栏:CSS 进阶篇】CSS3 新特性:过渡、动画与变形
【4月更文挑战第30天】CSS3的过渡、动画和变形三大特性为网页设计注入活力,创造生动丰富的用户体验。过渡提供平滑效果,常用于按钮点击等;动画实现复杂动态效果,适用于滚动字幕等;变形允许元素几何变换,如旋转和缩放。实际应用包括动态导航菜单、图片轮播和加载动画。然而,需注意浏览器兼容性、性能优化和设计平衡。掌握这些特性,将为网页设计带来更多创新可能。
|
21天前
|
XML 前端开发 JavaScript
CSS中动画、过渡、定位、浮动的作用
CSS中动画、过渡、定位、浮动的作用
|
21天前
|
前端开发 UED 开发者
【专栏】探讨了CSS3动画卡顿的原因,包括复杂动画效果、过多元素参与、低效代码结构和硬件资源限制,并提出优化措施
【4月更文挑战第29天】本文探讨了CSS3动画卡顿的原因,包括复杂动画效果、过多元素参与、低效代码结构和硬件资源限制,并提出优化措施:简化动画路径、控制元素数量、优化代码结构、利用硬件加速及性能监测。通过实际案例展示了优化效果,强调了性能优化对提升用户体验的重要性。在开发中,应持续关注并优化动画性能,以适应网页应用的需求。
|
21天前
|
前端开发 JavaScript UED
绚丽多彩的网页世界:深入探讨CSS动画的艺术与技巧
绚丽多彩的网页世界:深入探讨CSS动画的艺术与技巧
22 3