一、动画 - 过渡效果transition

news2024/11/28 11:44:20

内容目录:

  • 过渡动画;
  • 过渡动画的属性;

一、过渡动画

 过渡(transition)作用:
   - 通过过渡可以指定一个属性发生变化时的切换方式
   - 通过过渡可以创建一些非常好的效果,提升用户的体验

现在我们通过一个小项目来了解这个过渡动画用在哪里,注意这里不借助js,是纯css来实现?

<!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>
      * {
        margin: 0;
        padding: 0;
      }
      .box1 {
        width: 500px;
        height: 500px;
        background-color: silver;
        /* 开启bfc,防止重叠 */
        overflow: hidden;
      }

      .box1 div {
        width: 100px;
        height: 100px;
        /* 特别注意,当这里设置margin的时候,因为可能上边距重贴,导致无法正常下移动
      所以必须在box1上,写 overflow: hidden;*/
        margin-bottom: 100px;
      }
      .box2 {
        background-color: green;
      }
    </style>
  </head>
  <body>
    <div class="box1">
      <div class="box2"></div>
    </div>
  </body>
</html>

请添加图片描述
需求:
当我鼠标移动到box1的时候,我要改变box2的宽高为200.

实现:

/* 根据后代元素选择器: */
  .box1:hover .box2{
    width: 200px;
    height: 200px;
  }

写上后,发现宽高会变大,但是效果是box2突然变大。

优化:

  .box2 {
        background-color: green;
        /* box2的宽高,都在0.3s内过渡中变大 */
        transition: all .3s; 
      }
或者
    .box2 {
        background-color: green;
        /* 仅仅只让hegiht 高度属性在0.3s缓慢变大道200px */
        transition: height .3s;

      }

二、过渡动画属性

1.transition-property - 指定要执行的过渡的属性;

  • 多个属性间是用,隔开;
  • 如果所有属性都需要过度,则使用all关键字,
  • 大部分属性都支持过渡效果
 .box2 {
        background-color: green;
         /* 这个表示所有属性都过渡变化
        transition-property:all; */
         /* 这个表示,只是width进行过渡变化
        transition-property: width;
         */
         
         /* 宽,高,属性都进行过渡变化 */
        transition-property: width, height;
         
        
      }

2.transition-duration - 指定过渡效果的时间

需求:比如我想当用户鼠标移动到box1上时,box2 在 2s内缓慢变大(宽高都变),且颜色变成橘色。

   .box2 {
        background-color: green;
        /* 这个表示所有属性都过渡变化*/
        transition-property:all; 
        /* 指定过渡效果的时间 ,时间单位s , ms; 1s = 1000ms*/
        transition-duration: 2s;
      }
	或者 - /* 过渡时间还可以这样用 */
   .box2 {
        background-color: green;
        /* 可以针对不同的属性,指定对应的时间 */
        transition-property: height, width;
        transition-duration: 100ms , 2s;
      }

   
      /* 根据后代元素选择器 :太突然变大 */
      .box1:hover .box2{
        width: 200px;
        height: 200px;
        background-color: orange;
      }

注意:必须是从一个有效数值向另外一个有效数值过渡,不能是auto 去 到另一个数值,就可能设置了过渡效果也会无效。 比如box2 原来width:auto, 现在你设置当hover时, box2:200px, 然后加过渡效果,这就是无效的

比如我想给box2 margin-left 做过渡效果。让一开始从最后margin-left:400px;,往回走到最开始margin-left: 0;。 此时的400和0就都是有效数值,他们就是从400 像 0 过渡。

 .box2 {
        margin-left:400px;
        background-color: green;
        transition-property:all; 
        transition-duration: 2s;
      }

      .box1:hover .box2{
        margin-left: 0;
      }

下面是错误的:
浏览器是无法知道怎么从auto 变到0, 这样展示的效果就是一下就移动0了。

   .box2 {
        /* 当我们把这个换成auto, auto就不是有效数值,
        过渡效果就无法实现 */
        margin-left:auto;
        background-color: green;
        transition-property:all; 
        transition-duration: 2s;
      }

      .box1:hover .box2{
        margin-left: 0;
      }

3.transition-timing- function - 过渡的时序函数

可选值(具体看下面分析):
ease ---------默认值,慢速开始,先加速,再减速
linear --------匀速
ease-in ------加速运动
ease-out -----减速运动
ease-in-out — 先加速,后减速
cubic-bezier()–贝塞尔曲线来指定时序函数
steps()分步执行过渡效果, 可以把整个效果分成第一步,第二步…
可以设置第二个值, end, 在时间结束时执行过渡(默认值);start, 在时间开始时执行过渡

需求:
过渡动画,比如让box2,box3,的margin-left 从0 过渡到 400, 这个过程是怎么过渡的, 可以匀速,可以加速, 这就需要这个属性来控制。

实现:

  1. 先来设置一个没有加这个属性的效果,发现box2,box3过渡效果是一样的。
<!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>
      * {
        margin: 0;
        padding: 0;
      }
      .box1 {
        width: 500px;
        height: 500px;
        background-color: silver;
        /* 开启bfc,防止重叠 */
        overflow: hidden;
      }

      .box1 div {
        width: 100px;
        height: 100px;
        margin-bottom: 100px;
        margin-left: 0;
      }
      
      .box2 {
      
        background-color: green;
        transition-property:all; 
        transition-duration: 2s;

      }
      .box3{
        background-color: orange;
        transition-property: all;
        transition-duration: 2s;
      }
      /* 表示box1下的所有元素都移动,即box2,box3 */
      .box1:hover div{
        margin-left: 400px;
      }
      
    </style>
  </head>
  <body>
    <div class="box1">
      <div class="box2"></div>
      <div class="box3"></div>
    </div>
  </body>
</html>

2.接下来对box2进行加工

   .box2 {
      
        background-color: green;
        transition-property:all; 
        transition-duration: 2s;
         /* 过渡时序 
         ease:默认值,慢速开始,先加速,再减速, 这里发现box2和box3 都是一样的匀速运动。效果上没有区别
         */
        transition-timing-function: ease;
    
      }

试试第换下面的属性值:

  .box2 {
      
        background-color: green;
        transition-property:all; 
        transition-duration: 2s;
         /* 过渡时序 
         linear 匀速, 此时对比box2,box3,会发现,box2一直匀速,box3 因为没有单独设置
          transition-timing-function, 他默认就是ease 先加速,在减速,所以很容易
          发现他们出现前后速度不一的运动
         */
        transition-timing-function: linear;
    
      }

3.通过cubic-bezier()–贝塞尔曲线来指定时序函数

  • 我们不用自己设计,直接通过网https://cubic-bezier.com (来设置这个函数里面的值,注意是看左下角,的#后面的数值)
    在这里插入图片描述
  .box2 {
      
        background-color: green;
        transition-property:all; 
        transition-duration: 2s;
         /* 过渡时序 
         如果用贝塞尔曲线表示匀速
         */
        /* transition-timing-function: linear; */
        transition-timing-function:cubic-bezier(0,0,1,1);
    
      }

这里的(0,0)就是粉红色手柄坐标,(1,1) 是蓝色手柄坐标,通过这两个坐标就可以确定这个贝塞尔曲线。

  • 我们可以通过拖动这两个手柄,来自定义贝塞尔曲线,曲线的高低,就是加速和减速。
    比如这里的拖动后,我们直接看最顶部的对应的值,复制他。
    请添加图片描述
   .box2 {
      
        background-color: green;
        transition-property:all; 
        transition-duration: 2s;
         /* 过渡时序 
         自己设计的贝塞尔曲线
         */
     
        transition-timing-function:cubic-bezier(.24,.95,.82,-0.88);
    
      }
  1. steps()分步执行过渡效果.
    前面没有设置这个的时候,都是通过过渡效果,很流畅的margin-left 进行位移。
    现在加了这个后,会发现他是根据的数值,分步骤去位移,是停顿式的走,不是流畅的。
   .box2 {
      
        background-color: green;
        transition-property:all; 
        transition-duration: 2s;
         /* 过渡时序 
         表示box2 从 margin-left: 0 过渡 到400 在2s内分3步,走到位
         */
     
        transition-timing-function:steps(3);
    
      }
  • steps()分步执行过渡效果
    可以设置一个第二个值:
    end, 在时间结束时执行过渡(默认值);
    start, 在时间开始时执行过渡 ;
  .box2 {
      
        background-color: green;
        transition-property:all; 
        transition-duration: 2s;
         /* 过渡时序 
        steps 其实他里面其实是可以传第二个参数,我们没有写,他其实默认是end.

        比如这里是2步,也就是整个动画分成1s 1s, 然后box2 在每个1s 是他的开始,还是
        结束的时候开始运动,这里是end, 就表示1s结尾,在继续运动,往右走。
         */
     
        /* transition-timing-function:steps(2,end); */

        /* 如果我们改成start, 就表示每个的1s 开始就动画,你会发现运行后,里面就开始运动 */
        transition-timing-function:steps(2,start);
      }
  1. transition-delay 延迟效果
 .box2 {
      
        background-color: green;
        transition-property:all; 
        transition-duration: 2s;
        /* 过渡效果的延迟,等待相应的时间后再执行 */
        transition-delay:2s;
      }

6.上面这么多属性,transition 可以同时设置过渡相关所有属性。
只有一个要求,如果要写延迟,则两个事件中第一个是持续时间,第二个是延迟时间。其他的没有顺序

 .box2 {
      
        background-color: green;
        /* transition-property:all; 
        transition-duration: 2s;
        transition-delay:1s; */

        /* 
        一次性就设置完成
       */
        transition:2s margin-left 1s cubic-bezier(.25,.1,.25,1);
      }

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/664627.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

nginx的操作手册和nginx的升级

总结 目录 一首先关闭防火墙和下载nginx包 1.安装依赖包 2.创建运行用户与组 3.进入nginx的目录下进行编译安装 4. 编译和编译安装 5.让系统识别nginx的操作命令 ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/ 6.添加nginx系统服务把nginx服务加入到…

Idea+maven+springboot项目搭建系列--3 整合阿里云Canal完成Mysql数据的监听

前言&#xff1a;在搭建canal 服务之后&#xff0c;项目中就可以连接canal &#xff0c;完成对感兴趣的数据库及其表中数据的变动完成监听&#xff0c;本文依赖于你已经完成了对canal 服务的搭建工作&#xff1b; 1 Cannal 特点&#xff1a; Canal是阿里巴巴开源的一款基于My…

Spring Boot实战:拦截器和监听器的应用指南

当使用Spring Boot时&#xff0c;我们可以通过拦截器&#xff08;Interceptor&#xff09;和监听器&#xff08;Listener&#xff09;来实现对请求和响应的处理。拦截器和监听器提供了一种可插拔的机制&#xff0c;用于在请求处理过程中进行自定义操作&#xff0c;例如记录日志…

使用自动化测试获取手机短信验证码

目前在职测试开发,,写一些脚本,个人认为这职业不科学不应该有的职业,测试就是测试,开发就是开发,运维还是老鸟,这行业总能折腾些莫名其妙的东西出来,刚做这行时学的第一门语言是bash shell, 去新去单位上班直接写了个一键搭建测试环境的测试脚本,本来不想干测试了,好好做微信小…

Linux 学习记录36(C高级篇)

Linux 学习记录36(C高级篇) 本文目录 Linux 学习记录36(C高级篇)一、文件相关指令1. chmod 修改文件用户权限(1. 权限字母表示法(2. 权限8进制表示法 2. 修改文件所属组(1. chgrp(2. chown 能够同时修改多个(3. 创建链接文件>1 ln创建硬链接文件>2 ln -s 创建软链接文件 …

7DGroup性能实施项目日记1

壬寅年 己酉月 丁丑日 2022年9月21日 晴 经过上周的7DGroup学员群内部沟通&#xff0c;我们决定启动一个性能实施项目。 在这个实施项目中&#xff0c;把RESAR性能工程的每个环节都落地一遍&#xff0c;让所有参与培训的学员都可以参与。 在这个项目实施过程中&#xff0c;我打…

苹果照片传输到电脑怎么传?批量传输的技巧!

苹果照片传输到电脑怎么传&#xff1f;照片是苹果手机和电脑之间传输比较频繁的内容。对于刚接触苹果手机的朋友&#xff0c;可能还不是很了解传输方法&#xff0c;鉴于此&#xff0c;我们在这里提供几种有效方法来帮助您完成此项任务。无论您想要使用或不使用 iTunes 将照片从…

CAN Frame详解

CAN Frame是CAN总线通信的基本单位&#xff0c;它有多种类型&#xff0c;其中最常见的是数据帧&#xff08;Data Frame&#xff09;&#xff0c;用于传输数据。数据帧有标准格式&#xff08;Standard Format&#xff09;和扩展格式&#xff08;Extended Format&#xff09;&…

redhat 6.4安装oracle11g RAC (一)

&#xff08;一&#xff09;基础环境 虚拟机环境 &#xff1a;vmware workstation 12 操作系统 &#xff1a; redhat6.4 - 64bit 数据库版本 &#xff1a;11.2.0.4 Last login: Fri Jun 16 18:40:20 2023 from 192.168.186.1 [rootrhel64 ~]# cat /etc/redhat-release Red Ha…

项目描述1

学成在线- 6分片上传&#xff0c;8xxl-job 课程模块开发 分布式事务&#xff0c;消息表 spring-security oauth 用户认证授权 学成在线 学成在线认证授权 一些代码 黑马分布式事物 框架学习 - 若依 / RuoYi-Vue-Plus 统一数据权限 若依数据权限使用 数据权限表结构 1. 设备故…

音视频技术开发周刊 | 298

每周一期&#xff0c;纵览音视频技术领域的干货。 新闻投稿&#xff1a;contributelivevideostack.com。 AI艺术在北京798&#xff0c;展望人工智能与环境的未来 本文很有意思的提出了个假设&#xff0c;通过人工智能和艺术家协作与实践产生环绕地球的叙事&#xff0c;去开启置…

【事故致因】HFACS模型各层级中因素的具体含义及内容归纳

HFACS模型各层级中因素的具体含义及内容归纳 1 HFACS(2000版本)中英文结构图2 定义3 结构组成4 各层级因素及内容4.1 不安全行为4.2 不安全行为的前提条件4.3 不安全监督4.4 组织影响 5 HFACS框架的使用 1 HFACS(2000版本)中英文结构图 英文版本&#xff08;论文首次提出原图&…

接口测试基础知识(使用 Fiddler 抓包、使用 Postman 发起请求、Postman汉化教程)

文章目录 一、 什么是接口二、接口测试的流程三、设计接口测试测试用例常见的点四、使用 Fiddler 进行抓包1. 一个重要设置2. 进行抓包 五、使用 Postman 发起 GET 请求1. 通过API文档得到调用信息2. 通过 Postman 构造 GET 请求 六、使用 Postman 发起 POST 请求1. 得到接口调…

机器学习——朴素贝叶斯(手动代码实现)

朴素的我&#xff0c;决定朴素地徒手实现贝叶斯算法&#xff01; 摒弃sklearn 这个体贴善解人意把一切都打包封装好的妈妈 再见了sklearn 妈妈 我要自己手动实现 哪怕前方困难重重 哪怕我此刻还在发牢骚 但我还是要说&#xff0c;撒哟娜拉sklearn妈 看了知乎阿婆主的分析&#…

在 Maya、ZBrush 和 Substance 3D 中创建女枪手(P2)

今天瑞云渲染小编给大家带来了Ivan Lim 的Female Gunslinger 项目的细目&#xff0c;讨论了他在 Think Tank 的教育过程&#xff0c;并解释了他为什么选择虚幻引擎来呈现这个角色。这篇接着上篇继续拓扑UV、灯光材质、渲染等方面的分享 头发 我开始用一个块来处理头发&#xf…

看看人家那高并发秒杀系统,那叫一个优雅

618&#xff0c;大家剁手了么&#xff1f; 说起618&#xff0c;就不得不提其中较为复杂的秒杀环节了。虽说秒杀只是一个促销活动&#xff0c;但对技术要求不低。 秒杀作为618、双十一等电商活动不可缺少的一环&#xff0c;是一个非常典型的活动场景。秒杀场景的业务特点是限时…

并发知识学习

aqs中有2个队列&#xff0c;一个是同步队列&#xff0c;另外一个是条件队列简单记住&#xff1a;独占没有朋友&#xff0c;所以是null。共享就有朋友&#xff0c;所以是固定的node对象。nextWaiter就是表示节点的模式&#xff0c;在条件队列中指向下一个节点。 一个想要去获取锁…

车载测试范例,如何进行ADAS执行器性能测测试?

概述 执行器性能分为横向性能和纵向性能&#xff0c;横向性能主要指方向盘转向的响应性能&#xff0c;纵向主要包括油门加速性能及刹车减速性能。其中横向性能在ADAS中涉及的功能包括LKA、LDW&#xff0c;跟纵向加/减速性能相关的功能主要是ACC&#xff08;自适应巡航&#xf…

C++数据结构【树状数组】

​ 树状数组 什么是树状数组&#xff1f;树状数组和线段树的区别 树状数组的结构什么是lowbitlowbit如何计算代码实现&#xff1a;补充知识——&&#xff0c;|&#xff0c;^运算&|^注意&#xff1a; 树状数组的基本操作单点修改while循环版代码for循环版代码 单点查询区…

pytest生成 junit-xml 测试报告

pytest 生成junit-xml 测试报告&#xff0c;那么生成的xml报告有什么用呢&#xff1f;可以集合一些持续集成工具&#xff08;如jenkins…等&#xff09;方便查看报告。 junit-xml 测试报告 命令行参数有2个跟 junit-xml 报告相关的参数 --junit-xmlpath create junit-xm…