目录

  • 语法
    • 转换
      • 平移
      • 旋转
      • 缩放
      • 复合属性的顺序问题
    • 过渡动画
    • 帧动画
  • 案例
    • 案例1-热点图dot(缩放)
    • 案例2-热点图dot(缩放)
    • 案例3-开红包(旋转)
  • 问题
    • 问题1-transform不起作用
    • 问题2 - 过渡动画不起效果

语法

转换

css3中的转换允许我们对元素进行旋转、缩放、移动或倾斜。它分为2D转换 或 3D转换,一般与动画结合使用。

平移

语法

transform:translate(x,y)
  • 以元素当前的位置为相对参照,进行水平、垂直方向移动;x 表示水平方向移动,y 表示垂直方向移动;若是只设置一个值则代表水平移动;
  • 单位
    • px
    • 百分比:x、y的取值如果是百分比,则是相对于元素本身尺寸
旋转

语法

rotateX()                        /* 沿X轴旋转 */
rotateY()                       /* 沿Y轴旋转 */
rotateZ()                       /* 沿Z轴旋转 */
rotate()                      /* 默认沿着z轴旋转 */
  • 取值

    • 角度值为正数,表示顺时针旋转;
    • 角度值为负数,表示逆时针旋转;
缩放

语法

transform:scale(h,v)
  • h表示水平缩放比例,v表示垂直缩放比例 -> 如果设置1个值,表示水平以及垂直同时缩放
  • 取值
    • 0-1之间缩小
    • 大于1进行放大
复合属性的顺序问题

transform是一个复合属性,可以同时设置平移、旋转、缩放。
需要值得注意的是,变换的执行顺序是从后向前执行的!

过渡动画

语法

transition:all 1s ease 1s;

transition是一个复合属性

  • transition-property 指定应用过渡属性的名称 (width ,height,、、、、all表示所有的属性都有过渡效果)
  • transition-duration:过渡时间
  • transition-timing-function:过渡曲线
    • ease --默认 (由慢速开始,加速,慢速结束)
    • linear–匀速
    • ease-in --慢速开始
    • ease-out --慢速结束

过渡属性是谁过渡给谁加!
transition动画的缺点

  • [1]动画不能够自动开始(可以借助hover);
  • [2]动画次数只能固定一次,不能循环;​

帧动画

帧动画规则内指定一个 CSS 样式和动画将逐步从目前的样式更改为新的样式,使用帧动画分为两步:

  • [1] 定义帧动画

    @keyframes 动画名{from {// 开始的css样式}to{// 结束的css样式}
    }
    
    @keyframes 动画名{0% {// 开始的css样式}50%{// 中间过渡的css样式}...100%{// 结束的css样式}
    }
    
  • [2] 使用帧动画
    • animation是一个复合属性,规定了除animation-play-state属性外的所有属性的简写属性;

        animation: 动画名 动画一个周期所需时间 动画速度 动画延迟时间 动画次数 停留位置;
      
      • animation-name:属性名
      • animation-duration:规定动画完成一个周期所花费的s数;
      • animation-timing-function: 规定动画的速度曲线
        • ease --默认 (由慢速开始,加速,慢速结束)
        • linear–匀速
        • ease-in --慢速开始
        • ease-out --慢速结束
        • steps–指定了时间函数中的间隔数量(步长)
            steps(10) /* 表示这个动画需要将时间平分为10段来完成*/
          
      • animation-delay: 规定动画的延迟时间
      • animation-iteration-count:规定动画的播放次数
        • 1次(默认)
        • infinite:无数次
      • animation-paly-state:规定动画是否正在运行或暂停
        • running:正在运行
        • pause:暂停
      • animation-fill-mode: 规定动画结束时的状态
        • forwards:设置对象状态为动画结束时的状态
        • backwards(默认): 设置对象状态为动画开始时的状态
  • 注意:若是仅定义帧动画而没有使用,将不会产生任何效果。

案例

案例1-热点图dot(缩放)

现在存在图片,做成一个呼吸效果的动画,->动画视频链接

实现代码如下:

<body><img src="https://cdn.ituibei.cn/dist/welfareAT02/private/C/CFirstLayer_31/img/water_24855.png" alt="">
</body>
<style>@keyframes dot{0%{transform: scale(0);opacity: 0;}100%{transform: scale(1.3);}}body{background-color: red;text-align: center;padding-top: 100px;}img{animation: dot 0.6s linear infinite;width:24px;height: 24px;}
</style>

实现过程

    • 在定义动画时只定义了to(初始样式),没有定义from(结束样式),则默认结束样式为当前元素的样式----> img标签没有定义transform与opacity,则结束时的样式为默认值

      transform:scale(1);
      opacity:1;
      
    • 动画仅执行一次,此时在运行时这个图片是一个渐入的感觉-> 动画视频链接
    • 只要将动画次数改成无数次,就已经实现了所需效果,但是若是想效果更丝滑一点,可以在from(结束时)方大一下,这样在每次动画结束下次动画开始时会有一个回缩的效果;

      100%{transform: scale(1.3);
      }
      

案例2-热点图dot(缩放)

若是dot为非图片,则一个类似案例1的呼吸动画,实现代码如下:

<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8" /><meta http-equiv="X-UA-Compatible" content="IE=edge" /><meta name="viewport" content="width=device-width, initial-scale=1.0" /><title>Document</title><style>body {background-color: #999;padding-top: 100px;text-align: center;}.fa {position: relative;}.dot {position: absolute;width: 8px;height: 8px;top: 50%;left: 50%;transform: translate(-50%, -50%);border-radius: 50%;background-color: chartreuse;}.wave {/* 光波最初时与dot大小相同,只是带有阴影 */position: absolute;width: 8px;height: 8px;top: 50%;left: 50%;transform: translate(-50%, -50%);border-radius: 50%;box-shadow: 0 0 12px chartreuse;animation: bo 1.2s linear infinite;}@keyframes bo {/* 没有设置初始状态,则初始状态为添加动画元素的初始状态width: 8px;height: 8px;opacity: 1;*/70% {width: 30px;height: 30px;opacity: 1;}100% {width: 50px;height: 50px;opacity: 0;}}.dal {animation-delay: 0.6s;}</style></head><body><div class="fa"><div class="dot"></div><div class="wave"></div><div class="wave dal"></div></div></body>
</html>

案例3-开红包(旋转)


如上图在点击“开”时,希望这个“开”字能够沿着Y轴旋转几圈再进行页面跳转 ->动画视频链接 -> 添加动画效果,实现如下

<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8" /><meta http-equiv="X-UA-Compatible" content="IE=edge" /><meta name="viewport" content="width=device-width, initial-scale=1.0" /><title>开红包</title></head><body><div class="bg"><img src="https://lp-ag.umcdn.cn/952575f71c38ffee4ef9ccad033f2ed0/98afec881a187b8c7945a3f0eac7e032.png" class="openbtn"/></div><script>const imgbox = document.getElementsByClassName('openbtn')[0]imgbox.onclick= function(){imgbox.setAttribute('class','openbtn rotateClass')setTimeout(()=>{imgbox.setAttribute('class','openbtn')location.href = 'https://www.baidu.com'},1000)}</script></body><style>@keyframes torotate{from{transform: rotateY(360deg);}}*{padding:0;margin: 0;}.bg{position: relative;height: 100vh;background: url('https://static.adhudong.com/display/styles/images/bodyBg2.8a73276b.png') no-repeat left top;background-size: cover;}.openbtn{position: absolute;top: 175px;left:calc(50% - 50px);width: 100px;height: 100px;}.rotateClass{animation: torotate 0.5s linear infinite;}</style>
</html>

问题

问题1-transform不起作用


现在想做一个效果就是 “开”在水平方向居中且一直旋转,实现如下

 <body><div class="bg"><img src="https://lp-ag.umcdn.cn/952575f71c38ffee4ef9ccad033f2ed0/98afec881a187b8c7945a3f0eac7e032.png" class="openbtn"/></div></body><style>@keyframes torotate{from{transform: rotateY(360deg);}}*{padding:0;margin: 0;}.bg{position: relative;height: 100vh;background: url('https://static.adhudong.com/display/styles/images/bodyBg2.8a73276b.png') no-repeat left top;background-size: cover;}.openbtn{position: absolute;top: 175px;left:50%;transform: translateX(-50%);width: 100px;height: 100px;animation: torotate 0.5s linear infinite;}</style>

但是结果却与预期不同,原因是因为在帧动画中 transform这个属性一直在被重新;
解决办法是将translateX(-50%)添加到帧动画中

@keyframes torotate{from{transform: translateX(-50%) rotateY(360deg);}to{transform: translateX(-50%) rotateY(0deg);}
}

问题2 - 过渡动画不起效果

问题:上图在展开和收缩的时候想做一个过渡动画,但是发现设置了不起作用;

原因:过渡属性要有明确的属性值变化;width、height值被撑开但是值没变就没有办法过渡动画了;

总结:内容撑开的盒子没有办法做宽高的过渡动画

笔记(css3)-动画相关推荐

  1. CSS3动画animation认识和Animate.css的使用

    CSS动画可以取代js动画 在移动端会更加流畅! 下面是一个的绘制太阳系各大行星运行轨迹笔记,可以自学参考! 首先我们需要创建一个@keyframes规则 @keyframes name{from{w ...

  2. svg配合css3动画_与Sarah Drasner一起使用CSS,JS和SVG进行动画处理,并避免倦怠

    svg配合css3动画 In this episode of the Versioning Show, Tim and David are joined by Sarah Drasner, a tea ...

  3. 深入理解CSS3动画 rotate

    我这个解释应该是会比较全的,如果有兴趣深入了解CSS3动画的朋友,往下看,也许会有意想不到的收获. 本来想找张浏览器空间坐标轴的图.结果没有找到. 那就听我说,你们想象一下. x轴水平朝右,y轴垂直于 ...

  4. css+动画优化,css3动画性能优化--针对移动端卡顿问题

    一.使用css,jquery,canvas制作动画 1.Canvas 优点:性能好,强大,支持多数浏览器(除了IE6.IE7.IE8),画出来的图形可以直接保存为 .png 或者 .jpg的图形: 缺 ...

  5. CSS3动画属性 animation详解(看完就会)

    CSS3动画属性 animation 文章包含个人理解错误请指出   往期文章 [css高级]变量详解 轮播图swiper框架的基本使用 [Transform3D]转换详解(看完就会) [css动画] ...

  6. html 语言 gif 动画,动效篇(1)--从简单CSS3动画片段代码,到生成gif动图~

    简单css动画片段代码(最终效果 ) (一)请自行下载安装Dreamweaver 在Dreamweaver编写代码(如需参考请复制下列代码) (二)HTML CSS代码详解css代码(/*详解*/) ...

  7. css怎么动画中该透明度,通过css3动画和opacity透明度实现呼吸灯效果

    本文介绍了通过css3动画和opacity透明度实现呼吸灯效果的方法,分享给大家,具体如下: 呼吸灯 /*也可以通过加层罩,通过设置层罩透明度来实现亮度动画*/ body{ background-co ...

  8. 小猿圈自学web前端之CSS3动画练习案例:用CSS3做个钟表

    前段时间发的五子棋的游戏很多小伙伴都私聊让再做个,今天小猿圈web前端讲师为大家分享的是CSS3动画练习案例:用CSS3做个钟表,想玩的小伙伴记得自己运行一下呦. 自学CSS3属性之后,我们来用一个小 ...

  9. css3动画简介以及动画库animate.css的使用

    在这个年代,你要是不懂一点点css3的知识,你都不好意思说你是个美工.美你妹啊,请叫我前端工程师好不好.呃..好吧,攻城尸...呵呵,作为一个攻城尸,没有点高端大气上档次的东西怎么能行呢,那么css3 ...

最新文章

  1. 初等数论--整除--公倍数一定是最小公倍数的倍数
  2. 手把手实现YOLOv3(二)
  3. 防止过拟合以及解决过拟合
  4. Dojo学习笔记(三):类化JavaScript
  5. 16位的数字高字节和低字节_掩盖8位数字的较低和较高半字节| 8085微处理器
  6. 谷歌Chrome浏览器欲推门户网站聚合 正测试新“探索”页面
  7. poj2528 区间覆盖
  8. python︱Python进程、线程、协程详解、运行性能、效率(tqdm)
  9. postfix+ldap
  10. html注册页面教程视频,新手建站HTML 学习系列视频教程之HTML 简介
  11. 覆了天下也罢,始终不过一场繁华
  12. Audio-driven Talking Face Video Generation with Learning-based Personalized Head Pose (译文)
  13. 第一个很土很土很可爱的程序
  14. HTMLCSS常见面试题
  15. 怎么录屏?5 款免费无水印的录屏神器
  16. [乡土民间故事_徐苟三传奇]第三回_小苟三巧施放鱼计
  17. Problem M: 薪酬计算 之二
  18. 三国志战略版:三势贾的另类搭配,也可以这么强?
  19. 使用exe4j打包exe文件
  20. 瞬态抑制二极管和esd静电管的区别

热门文章

  1. 【2】【MySQL】常用监控指标及监控方法(转)
  2. 我的世界服务器怎么制作新手礼包,腐竹教你在租赁服务器中制作新手礼包
  3. 计算机降噪方式,如何使电脑的噪音降噪?
  4. 软件测试之——关于APP弱网测试
  5. kodi tv版_如何在您的Amazon Fire TV或Fire TV Stick上安装Kodi
  6. postmain报400_Postman测试@RequestBody发送请求时报400错误
  7. 微信群群名:每天写一题经典算法
  8. html怎么检测分享朋友圈没,微信中里如何判断页面被分享到朋友圈和微信号的成功,附代码...
  9. 微信的这几个实用功能,你知道吗?
  10. 看完能涨薪10k的python+pytest接口自动化(1)-接口测试基础