侯体宗的博客
  • 首页
  • Hyperf版
  • beego仿版
  • 人生(杂谈)
  • 技术
  • 关于我
  • 更多分类
    • 文件下载
    • 文字修仙
    • 中国象棋ai
    • 群聊
    • 九宫格抽奖
    • 拼图
    • 消消乐
    • 相册

浅谈CSS过渡、动画和变换

前端  /  管理员 发布于 7年前   207

1. 使用过渡

过渡效果一般是由浏览器直接改变元素的CSS属性实现的。例如,如果使用:hover选择器,一旦用户将鼠标悬停在元素之上,浏览器就会应用跟选择器关联的属性。

当用户将鼠标悬停在span元素上的时候,浏览器就会响应,直接应用新的属性。变化如下图所示:

CCS过渡属性允许控制应用新属性值的速度。比如可以选择逐渐改变示例中span元素的外观,让鼠标移到单词banana上的效果更和谐。

 

transition-delay 和 transition-duration 属性指定为CSS时间,是一个数字,单位为ms(毫秒)或者s(秒)。

transition简写属性的格式如下: 

XML/HTML Code复制内容到剪贴板
  1. transition: <transition-property> <transition-duration> <transition-timing-function> <transition-delay>  

修改前面示例的CSS代码如下:

XML/HTML Code复制内容到剪贴板
  1. p { padding: 5px; border: medium double black; background-color: lightgray; font-family: sans-serif;}   
  2. #banana { font-size: large; border: medium solid green;}   
  3. #banana:hover {   
  4.     font-size: x-large; border: medium solid white; background-color: #1fa6e6; color: white; padding: 4px;   
  5.     transition-delay: 100ms;   
  6.     transition-property: background-color,color,padding,font-size,border;   
  7.     transition-duration: 500ms;   
  8. }  

在这个例子中,为样式添加了过渡,是通过#banana:hover 选择器应用的。过渡会在用户将鼠标悬停在span元素上100ms之后开始,持续时间为500ms,过渡应用到 background-color、color、padding、font-size和border属性。下面的效果图展示了这个过渡的渐进过程:

注意这个示例中指定多个属性的方式。过渡属性的值用逗号隔开,这样过渡效果才会同时出现。可以为延迟时间和持续时间指定多个值,它代表的意思是不同的属性在不同的时间点开始过渡,且持续时间也不同。

1.1 创建反向过渡

过渡只有在应用与其关联的样式时才会生效。示例样式中使用了:hover 选择器,这意味着只有用户将鼠标悬停在span元素上才会应用样式。用户一旦将鼠标从span元素上已开,只剩下#banana样式,默认情况下,元素的外观会立刻回到初始状态。

因为这个原因,大多数过渡成对出现:暂时状态的过渡和方向相反的反向过渡。修改前面示例的CCS代码,从而展示如何通过应用另一种过渡样式平滑地返回初始样式。

CSS Code复制内容到剪贴板
  1. p { padding: 5px; border: medium double black; background-color: lightgray; font-family: sans-serif;}   
  2. #banana {   
  3.     font-size: large; border: medium solid green;   
  4.     transition-delay: 100ms;   
  5.     transition-duration: 500ms;}   
  6. #banana:hover {   
  7.     font-size: x-large; border: medium solid white; background-color: #1fa6e6; color: white; padding: 4px;   
  8.     transition-delay: 100ms;   
  9.     transition-property: background-color,color,padding,font-size,border;   
  10.     transition-duration: 500ms;   
  11. }  

1.2 选择中间值的计算方式

使用过渡时,浏览器需要为每个属性计算初始值和最终值之间的中间值。使用transition-timing-function 属性指定计算中间值的方式,表示为四个点控制的三次贝塞尔曲线。有五种预设曲线可以选择,由下面的值表示:

* ease(默认值)

* linear

* ease-in

* ease-out

* ease-in-out

从下图可以看到这五种曲线,它们展示了中间值随着时间的推移变为最终值的速率。

搞清楚这些值最简单的办法就是在自己的HTML文档中试验。还有另外一个值 cubic-bezier,可用来指定自定义曲线。

修改前面示例的CSS样式如下,展示 transition-timing-function 属性的应用:

CSS Code复制内容到剪贴板
  1. p { padding: 5px; border: medium double black; background-color: lightgray; font-family: sans-serif;}   
  2. #banana {   
  3.     font-size: large; border: medium solid green;   
  4.     transition-delay: 10ms;   
  5.     transition-duration: 250ms;;   
  6. }   
  7. #banana:hover {   
  8.     font-size: x-large; border: medium solid white; background-color: #1fa6e6; color: white; padding: 4px;   
  9.     transition-delay: 100ms;   
  10.     transition-property: background-color,color,padding,font-size,border;   
  11.     transition-duration: 500ms;   
  12.     transition-timing-function: linear;   
  13. }  

2. 使用动画

CSS动画本质上是增强的过渡。在如何从一种样式过渡到另一种样式的过程中,具有了更多选择、更多控制,以及更多灵活性。

animation 简写属性的格式如下:

XML/HTML Code复制内容到剪贴板
  1. animation: <animation-name> <animation-duration> <animation-timing-function> <animation-delay> <animation-iteration-count>  

注意,这些属性都不是用来指定要作为动画的CSS属性的。这是因为动画是在两部分定义的。第一部分包含在样式声明中,使用了上面表中列出的属性。它们定义了动画的样式,但并没有定义哪些属性是动画。第二部分使用@key-frames规则窗口,用来定义定义动画的属性。从下面代码中可以看到定义动画的这两部分。

XML/HTML Code复制内容到剪贴板
  1. <!DOCTYPE html>  
  2. <html lang="en">  
  3. <head>  
  4.     <meta charset="UTF-8">  
  5.     <title>Example</title>  
  6.     <style type="text/css">  
  7.         #ball{   
  8.             width: 180px; height: 180px; background-color:green; margin:20px auto;border-radius: 90px;   
  9.             -webkit-animation-delay: 100ms;   
  10.             -webkit-animation-duration: 2000ms;   
  11.             -webkit-animation-iteration-count: infinite;   
  12.             -webkit-animation-timing-function: linear;   
  13.             -webkit-animation-name:'GrowQuare';   
  14.         }   
  15.         @-webkit-keyframes GrowQuare {   
  16.             to {   
  17.                 background-color: yellow;   
  18.                 border-radius: 0;   
  19.             }   
  20.         }   
  21.     </style>  
  22. </head>  
  23. <body>  
  24. <div id="ball"></div>  
  25. </body>  
  26. </html>  

要明白在这个示例中做了什么,应该仔细研究一下动画的两部分。第一部分是在样式中定义动画属性,是跟#ball选择器一起的。先看看基本属性:选择器样式应用100ms后开始播放动画属性,持续时间2000ms,无限重复播放,中间值使用linear函数计算。除了重复播放动画,这些属性在过渡中都有对应属性。

这些基本的属性并没有指出为哪些CSS属性应用动画。为此,要使用 animation-name 属性给动画属性起个名字,这里叫 GrowsQuare 。这样,就相当于告诉浏览器找一组名为 GrowQuare 的关键帧,然后将这些基本属性的值应用到 @keyframes指定的动画属性上。下面是此例代码中关键帧的声明(这里省略了-webkit前缀):

CSS Code复制内容到剪贴板
  1. @-webkit-keyframes GrowQuare {   
  2.      to {   
  3.          background-color: yellow;   
  4.          border-radius: 0;   
  5.      }   
  6.  }  

声明的开始是@keyframes,接着指定了这组关键帧的名字 GrowQuare。声明内部指定了一组要应用的动画效果。to 声明定义了一组设置动画样式的属性,同时也定义了动画结束时这些属性的最终值。动画的初始值来自进行动画处理的元素在应用样式之前的属性值。

此例的效果是一个大小为180像素的圆形,渐变成正方形。其显示效果如下图所示:

(待续)

以上这篇浅谈CSS过渡、动画和变换就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。

原文地址:http://www.cnblogs.com/luka/archive/2016/07/20/5689833.html


  • 上一条:
    浅谈CSS3动画的回调处理
    下一条:
    CSS更改鼠标为手状样式
  • 昵称:

    邮箱:

    0条评论 (评论内容有缓存机制,请悉知!)
    最新最热
    • 分类目录
    • 人生(杂谈)
    • 技术
    • linux
    • Java
    • php
    • 框架(架构)
    • 前端
    • ThinkPHP
    • 数据库
    • 微信(小程序)
    • Laravel
    • Redis
    • Docker
    • Go
    • swoole
    • Windows
    • Python
    • 苹果(mac/ios)
    • 相关文章
    • 使用 Alpine.js 排序插件对元素进行排序(0个评论)
    • 在js中使用jszip + file-saver实现批量下载OSS文件功能示例(0个评论)
    • 在vue中实现父页面按钮显示子组件中的el-dialog效果(0个评论)
    • 使用mock-server实现模拟接口对接流程步骤(0个评论)
    • vue项目打包程序实现把项目打包成一个exe可执行程序(0个评论)
    • 近期文章
    • 智能合约Solidity学习CryptoZombie二课:让你的僵尸猎食(0个评论)
    • 智能合约Solidity学习CryptoZombie第一课:生成一只你的僵尸(0个评论)
    • 在go中实现一个常用的先进先出的缓存淘汰算法示例代码(0个评论)
    • 在go+gin中使用"github.com/skip2/go-qrcode"实现url转二维码功能(0个评论)
    • 在go语言中使用api.geonames.org接口实现根据国际邮政编码获取地址信息功能(1个评论)
    • 在go语言中使用github.com/signintech/gopdf实现生成pdf分页文件功能(0个评论)
    • gmail发邮件报错:534 5.7.9 Application-specific password required...解决方案(0个评论)
    • 欧盟关于强迫劳动的规定的官方举报渠道及官方举报网站(0个评论)
    • 在go语言中使用github.com/signintech/gopdf实现生成pdf文件功能(0个评论)
    • Laravel从Accel获得5700万美元A轮融资(0个评论)
    • 近期评论
    • 122 在

      学历:一种延缓就业设计,生活需求下的权衡之选中评论 工作几年后,报名考研了,到现在还没认真学习备考,迷茫中。作为一名北漂互联网打工人..
    • 123 在

      Clash for Windows作者删库跑路了,github已404中评论 按理说只要你在国内,所有的流量进出都在监控范围内,不管你怎么隐藏也没用,想搞你分..
    • 原梓番博客 在

      在Laravel框架中使用模型Model分表最简单的方法中评论 好久好久都没看友情链接申请了,今天刚看,已经添加。..
    • 博主 在

      佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 @1111老铁这个不行了,可以看看近期评论的其他文章..
    • 1111 在

      佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 网站不能打开,博主百忙中能否发个APP下载链接,佛跳墙或极光..
    • 2016-10
    • 2016-11
    • 2017-06
    • 2017-07
    • 2017-08
    • 2017-09
    • 2017-10
    • 2017-11
    • 2018-03
    • 2018-04
    • 2018-05
    • 2018-06
    • 2018-09
    • 2018-11
    • 2018-12
    • 2019-02
    • 2020-03
    • 2020-04
    • 2020-05
    • 2020-06
    • 2021-04
    • 2021-05
    • 2021-07
    • 2021-08
    • 2021-09
    • 2021-10
    • 2021-11
    • 2022-08
    • 2022-09
    • 2022-10
    • 2022-11
    • 2022-12
    • 2023-01
    • 2023-02
    • 2023-03
    • 2023-04
    • 2023-05
    • 2023-06
    • 2023-07
    • 2023-09
    • 2023-10
    • 2023-11
    • 2023-12
    • 2024-01
    • 2024-02
    • 2024-03
    • 2024-04
    Top

    Copyright·© 2019 侯体宗版权所有· 粤ICP备20027696号 PHP交流群

    侯体宗的博客