CSS3通过var()和calc()函数实现动画特效


Posted in HTML / CSS onMarch 30, 2021

CSS3通过var()和calc()函数实现动画特效

预习知识点.

  • 动画帧
  • 背景渐变
  • var() 和 calc() 的使用
  • flex布局的场景

Start:

创建HTML结构:

<section>
    <div class="loading">
      <div class="text"></div>
      <div class="clock" style="--i:1;"></div>
      <div class="clock" style="--i:2;"></div>
      <div class="clock" style="--i:3;"></div>
      <div class="clock" style="--i:4;"></div>
      <div class="clock" style="--i:5;"></div>
      <div class="clock" style="--i:6;"></div>
      <div class="clock" style="--i:7;"></div>
      <div class="clock" style="--i:8;"></div>
      <div class="clock" style="--i:9;"></div>
      <div class="clock" style="--i:10;"></div>
      <div class="clock" style="--i:11;"></div>
      <div class="clock" style="--i:12;"></div>
      <div class="clock" style="--i:13;"></div>
      <div class="clock" style="--i:14;"></div>
      <div class="clock" style="--i:15;"></div>
      <div class="clock" style="--i:16;"></div>
      <div class="clock" style="--i:17;"></div>
      <div class="clock" style="--i:18;"></div>
      <div class="clock" style="--i:19;"></div>
      <div class="clock" style="--i:20;"></div>
    </div>
  </section>

因为我们要转圈圈, 所以需要20个小盒子来组成我们的圈盒子,里面加上 style 样式: --i :num 这样我们获取到后面的数值.

盒子居中:

*{
      margin: 0;
      padding: 0;
      box-sizing: border-box;
    }
  section{
    display:flex;
    justify-content: center;
    align-items: center;
    min-height: 100vh;
    background: -webkit-linear-gradient(left top, pink, orange);
  }

使用 flex 布局, 讲盒子定位到正中央的位置,
background: -webkit-linear-gradient(left top, pink, orange);
这个是渐变背景.

设置 loading 盒子大小.

.loading{
    position: relative;
    width: 250px;
    height: 250px;
  }

定位loading 盒子里面的文本和圈盒子.

.loading .text::after{
    content: "Loading";
    position: absolute;
    top: 50%;
    left: 50%;
    transform: translate(-50%, -50%);
    color: #000;
    font-size: 24px;
    font-weight:600;
    height: 66px;
    width: 130px;
    text-align: center;
    line-height: 66px;
    transition: all .5s;
    letter-spacing: 2px;
  }
.loading .clock{
    position:absolute;
    left: 50%;
    height:  25px;
    width: 8px;
    background-color:red;
    transform: rotate(calc(18deg * var(--i)));
    transform-origin: 0 125px;
    animation: clock 1.2s linear infinite;
    animation-delay: calc(0.06s * var(--i));
  }

通过 var (–i) 我们就可以获取到 该标签 style 里面 i 的num值,
度数的计算 360 / 20 = 18 deg 因为我们是20个圈盒子, 每个旋转 18deg,之后的都叠加旋转, 就可以达到这个效果。 但是如果不更改旋转的位置, 那么就会绕着圈盒子的正中央直接进行旋转, 不会散开,而直接构成一个圆。

CSS3通过var()和calc()函数实现动画特效

圈盒子的旋转定位 就是这样来的。

定义动画,添加动画

@keyframes clock {
    0%, 50%{
      background-color:pink;
      box-shadow: none;
    }
    50.1%, 100%{
      background-color: red;
      box-shadow: 0 0 5px red,
                  0 0 10px red,
                  0 0 25px red,
                  0 0 40px red;
    }
  }
transform-origin: 0 125px;
    animation: clock 1.2s linear infinite;
    animation-delay: calc(0.06s * var(--i));

对应盒子阴影, 可以设置多个值, 这样更炫.

加上Hover事件 停止动画

loading .text:hover::after{
    content: "Ended";
    transform:  translate(-50%, -50%) translateY(-8px) scale(1.3);
    color: red;
  }
  .loading:hover .clock{
    animation-play-state: paused;
  }

到此这篇关于CSS3通过var()和calc()函数实现动画特效的文章就介绍到这了,更多相关css动画效果内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章,希望大家以后多多支持三水点靠木!

 
HTML / CSS 相关文章推荐
CSS3——齿轮转动关键代码
May 02 HTML / CSS
使用CSS3的背景渐变Text Gradient 创建文字颜色渐变
Aug 19 HTML / CSS
CSS3中的Transition过度与Animation动画属性使用要点
May 20 HTML / CSS
css和css3弹性盒模型实现元素宽度(高度)自适应
May 15 HTML / CSS
css3实现六边形边框的实例代码
May 24 HTML / CSS
HTML5 Canvas draw方法制作动画效果示例
Jul 11 HTML / CSS
谷歌浏览器小字体处理方案即12px以下字体
Dec 17 HTML / CSS
基于HTML5 WebGL的3D机房的示例
Mar 16 HTML / CSS
canvas因为图片资源不在同一域名下而导致的跨域污染画布的解决办法
Jan 18 HTML / CSS
H5最强接口之canvas实现动态图形功能
May 31 HTML / CSS
HTML5 body设置全屏背景图片的示例代码
Dec 08 HTML / CSS
Html5 new XMLHttpRequest()监听附件上传进度
Jan 14 HTML / CSS
CSS3实现模糊背景的三种效果示例
使用css样式设计一个简单的html登陆界面的实现
CSS实现漂亮的时钟动画效果的实例代码
CSS3点击按钮圆形进度打钩效果的实现代码
完美实现CSS垂直居中的11种方法
CSS代码检查工具stylelint的使用方法详解
5个HTML5的常用本地存储方式详解与介绍
You might like
example1.php
2006/10/09 PHP
php 需要掌握的东西 不做浮躁的人
2009/12/28 PHP
JS获取dom 对象 ajax操作 读写cookie函数
2009/11/18 Javascript
基于JQuery的Pager分页器实现代码
2010/07/17 Javascript
jquery默认校验规则整理
2014/03/24 Javascript
详解js中构造流程图的核心技术JsPlumb(2)
2015/12/08 Javascript
jquery实现具有收缩功能的垂直导航菜单
2016/02/16 Javascript
jquery实现下拉框功能效果【实例代码】
2016/05/06 Javascript
BootStrap日期控件在模态框中选择时间下拉菜单无效的原因及解决办法(火狐下不能点击)
2016/08/18 Javascript
微信小程序上滑加载下拉刷新(onscrollLower)分批加载数据(一)
2017/05/11 Javascript
客户端(vue框架)与服务器(koa框架)通信及服务器跨域配置详解
2017/08/26 Javascript
javascript字体颜色控件的开发 JS实现字体控制
2017/11/27 Javascript
js原生实现移动端手指滑动轮播图效果的示例
2018/01/02 Javascript
vue实现的组件兄弟间通信功能示例
2018/12/04 Javascript
微信小程序订阅消息(java后端实现)开发
2020/06/01 Javascript
Vue $emit()不能触发父组件方法的原因及解决
2020/07/28 Javascript
python实现JAVA源代码从ANSI到UTF-8的批量转换方法
2015/08/10 Python
剖析Python的Tornado框架中session支持的实现代码
2015/08/21 Python
Python中的字符串操作和编码Unicode详解
2017/01/18 Python
浅谈Scrapy框架普通反爬虫机制的应对策略
2017/12/28 Python
[原创]Python入门教程4. 元组基本操作
2018/10/31 Python
PyCharm配置mongo插件的方法
2018/11/30 Python
python实现五子棋人机对战游戏
2020/03/25 Python
使用Python进行中文繁简转换的实现代码
2019/10/18 Python
PyQt5 closeEvent关闭事件退出提示框原理解析
2020/01/08 Python
python 已知一个字符,在一个list中找出近似值或相似值实现模糊匹配
2020/02/29 Python
幼教毕业生自我鉴定
2014/01/12 职场文书
九年级物理教学反思
2014/01/29 职场文书
《跟踪台风的卫星》教学反思
2014/04/10 职场文书
志愿者宣传口号
2014/06/17 职场文书
武当山导游词
2015/02/03 职场文书
施工安全保证书
2015/05/09 职场文书
高中同学会致辞
2015/08/01 职场文书
nginx 多个location转发任意请求或访问静态资源文件的实现
2021/03/31 Servers
HTML5页面音频自动播放的实现方式
2021/06/21 HTML / CSS
golang定时器
2022/04/14 Golang