web动画(Animation) - 过渡效果transition

news2024/12/24 2:42:05

内容目录:

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

一、过渡动画

 过渡(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/644847.html

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

相关文章

Qt6之样式表2

一、样式选择器类型 一般情况下组件最终都会产生父子、子孙等关系&#xff0c;此时样式选择器类型非常重要&#xff0c;它决定着你的类型是否互相直接独立、互相影响和便捷高效的快速设置样式。 1、如下图常见的一个工具栏&#xff0c;切换时鼠标划过是灰色&#xff0c;选中后是…

QTYX量化系统实战案例分享|每日增量涨停股池叠加形态分析-202306第三弹

前言 “实战案例分享系列”是和大家分享一些股票量化分析工具QTYX在实战中的应用案例&#xff08;包括失败的案例&#xff09;&#xff0c;这样能够帮助大家更好地去理解QTYX中的功能设计&#xff0c;也能更好地帮助大家搭建出属于自己的量化交易系统。 关于QTYX的使用攻略可以…

给大家分享下什么是「API接口」

作为产品经理&#xff0c;了解清楚接口的相关知识是非常有必要的&#xff0c;毕竟总不想被技术大佬认为自己时什么都不懂的需求搬运工。那就往下看下去吧 -----拿去餐馆吃饭的例子 模拟网络请求流程 厨师是后端提供API&#xff0c;服务员是前端请求调用API&#xff0c;我们是用…

Pyside6-第八篇-QLabel文本标签

本篇是Pyside6的第八篇&#xff0c;本章来看看另一个知识点。 文本标签QLabel。它不仅仅可以用于文本&#xff0c;还可以显示富文本和图像。它是一个多功能的小部件&#xff0c;可以根据需要显示不同类型的内容。 部分源码 class QLabel(QFrame):"""QLabel(self…

T9481 T8300 T8110C罗克韦尔自动化可信通信接口

​ T9481 T8300 T8110C罗克韦尔自动化可信通信接口 T9481 T8300 T8110C罗克韦尔自动化可信通信接口 DCS有哪些通讯方式&#xff1f;各有什么缺点&#xff1f; dcs作为大型控制系统&#xff0c;它采用的通信方式无非就是数字通信和模拟通信。数字通信它在DCS使用就是在监视层和…

PCB封装设计实践和文件模板

在之前的文章 详解AD(Altium Designer 23)中的机械层 - 1、详解AD(Altium Designer 23)中的机械层 - 2 中&#xff0c;我们详细介绍了AD中机械层的相关设置&#xff0c;今天结合PCB封装的设计&#xff0c;给出一些实践建议&#xff0c;并分享一个文件模板。 PCB封装设计 PCB&…

SpringBoot 集成 canal

什么是 Canal 阿里巴巴 B2B 公司&#xff0c;因为业务的特性&#xff0c;卖家主要集中在国内&#xff0c;买家主要集中在国外&#xff0c;所以衍生出了同步杭州和美国异地机房的需求&#xff0c;从 2010 年开始&#xff0c;阿里系公司开始逐步的尝试基于数据库的日志解析&#…

Linux常用指令和知识

ls 显示工作目录底下的所有文件/文件夹 使用命令ls, 会直接显示HOME目录下的所有文件 如果不加任何参数,那么ls指定的目录是初始的HOME目录(因为初始的工作目录为HOME目录): 使用ls / 会显示根目录底下的所有文件 如何查看根目录: 三个参数: -a -h -l -a 选项表示all的意思,列…

Python 基于招聘数据可视化系统

1 简介 Python 基于招聘数据可视化系统&#xff0c;视频效果如下&#xff1a; 基于Python的招聘信息可视化系统&#xff0c;附源码 随着国内的经济不断的快速发展&#xff0c;现在学生的就业压力也在逐年增加&#xff0c;网络上的招聘信息非常的丰富&#xff0c;但是对于学生而…

百城巡展 | 人大金仓6月阔步新征程全力开新局

6月上旬&#xff0c;人大金仓“百城巡展”走过天津、杭州、成都&#xff0c;吸引线上线下逾6660人参与&#xff0c;并有14家新成员单位加入金兰生态组织&#xff0c;共同支撑用户更多关键性应用需求&#xff0c;为人大金仓开拓新市场、赋能新行业、构建新生态迈出坚实的一步。 …

驾驶舱数据指标体系设计

大数据时代下&#xff0c;各行各业面对众多的顾客和复杂多变的市场需求&#xff0c;要想及时适应市场变化&#xff0c;掌握市场动态&#xff0c;就需要对各个环节的数据进行分析&#xff0c;得到科学有效的结论来指导决策&#xff0c;这就离不开领导驾驶舱。 — 01 — 什么是…

Vue中如何进行数据可视化图表展示

Vue中如何进行数据可视化图表展示 数据可视化是现代化的数据分析和展示方式&#xff0c;可以使数据更加直观、易于理解和传达。Vue作为一款流行的前端框架&#xff0c;提供了丰富的插件和工具来实现数据可视化图表展示&#xff0c;其中最常用的是Echarts和D3.js。 本文将介绍…

Mind2Web: 首个全面衡量大模型上网能力的数据集

夕小瑶科技说 原创 作者 | 智商掉了一地、ZenMoore 在互联网的浩瀚世界中&#xff0c;存在着无数复杂而扑朔迷离的任务等待我们去解决。如果要设计一个解决很多问题的通用智能体&#xff08;AI agent&#xff09;&#xff0c;无论是关于购物、旅行、学习还是娱乐&#xff0c;…

张驰咨询:如何评估六西格玛咨询公司的专业水平和实际效果?

六西格玛是一个能够帮助企业改进业务流程&#xff0c;提高质量和效率的方法论和工具&#xff0c;也是一种经营管理思想。在选择六西格玛咨询公司时&#xff0c;就需要考虑以下几个方面。 1、咨询公司的信誉和口碑 首先要查明咨询公司的资质和信誉。可以从市场上那些知名度比较…

微信小程序反编译报SyntaxError: Unexpected token ‘}‘ 不完美的解决方法

文章目录 1.反编译报错2.分析已反编译出来的文件3.错误原因4.没有完美解决的方法5.小笔记6.相关链接 1.反编译报错 最近在搞小程序&#xff0c;参考Csdn博客的微信小程序反编译Blog&#xff0c;一步一步操作&#xff0c;获取到了.wxapkg&#xff0c;在wxappUnpacker目录下执行…

Vue中如何进行分布式错误日志收集与监控

Vue中如何进行分布式错误日志收集与监控 随着前端界面的复杂化&#xff0c;前端错误日志的收集和监控也成为了一个重要的问题。在分布式应用中&#xff0c;需要跨多个前端应用和后端服务收集和监控错误日志。本文将介绍如何在 Vue 中使用 Sentry 进行分布式错误日志收集和监控…

应急响应:系统入侵排查指南

目录 系统基本信息排查 Windows系统排查 Linux系统排查 CPU信息 操作系统信息 载入模块排查 用户排查 Windows系统用户排查 排查所有账户 Linux用户排查 root账户排查 查看所有可登录账户 查看用户错误的登录信息 查看所有用户最后登录信息 排查空口令账户 启…

从开发到部署:一站式指南创建个性化 Slack App 问答机器人

从开发到部署&#xff1a;一站式指南创建个性化 Slack App 问答机器人 01 简介 做这个教程是因为看别人拿免费的割韭菜很不爽&#xff0c;所以准备做个教程来教大家如何搭建一个问答机器人 内核其实就是利用了slack提供的官方api&#xff0c;自己创建app然后获取艾特信息&#…

Python3数据分析与挖掘建模(15)特征选择与特征变换

1 特征选择 1. 1 概述 特征选择是一种剔除与标注不相关或冗余的特征的方法&#xff0c;以减少特征集的维度和复杂性&#xff0c;并提高模型的性能和解释能力。特征选择的目标是选择那些对目标变量有预测能力且与其他特征不冗余的特征。 特征选择的方法可以分为三类&#xff…

【国产虚拟仪器】基于ARM+FPGA+8通道高速AD代替美国国家仪器的电能质量分析仪设计(一)NI方案介绍

一、背景&#xff1a;基于美国国家仪器的采集方案介绍 本文设计的电能质量分析仪数据分析系统以NI公司的National Instruments LabVIEW2018作为软件开发平台&#xff0c;结合硬件平台&#xff0c;实现数据的采集、波形显示和数据 分析。硬件电路的主要作用是对电网信号进行降幅…