zoukankan      html  css  js  c++  java
  • 理解CSS过渡transition

    示例效果

    属性介绍

    transition-property

    transition-property定义应用过渡效果的CSS属性名称,默认值all,表示所有属性都获得过渡效果;属性值none表示没有属性获得过渡效果;property规定应用过渡效果的CSS属性。

    过渡属性可以是多个值,多个属性之间用逗号间隔。

    示例:transition-property: opacity, width;

    并不是所有CSS属性都有过渡效果,只有具有中间值的属性才有效果,一般来说属性值可以为数值的均可获得过渡。

    transition-duration

    transition-duration定义完成过渡的时长,默认值0s,属性值为秒或毫秒

    transition-timing-function

    transition-timing-function定义过渡动画函数。默认值ease,表示慢速开始,然后变快,慢速结束;linear表示匀速运动;ease-in表示慢速开始(慢到快);ease-out表示慢速结束(快到慢);ease-in-out表示慢速开始和结束(慢到快到慢);cubic-bezier(x1, y1, x2, y2)自定义贝塞尔运动曲线。

    关于贝塞尔曲线可参考这篇文章:贝塞尔曲线扫盲

    贝塞尔曲线:

    过渡效果的贝塞尔曲线通过四个点来控制,绘制的是三次贝塞尔曲线,其中p0表示(0,0), p3表示(1,1)。transition-timing-function属性通过确定p1(x1, y1)和p2(x2,y2)的坐标值来确定曲线值,x1,y1,x2,y2都是0到1范围内的值(包括0和1)
    在线获取贝塞尔曲线值

    过渡原理:

    Vstart = 属性起始值; Vend = 属性结束值; Vres = 中间值; p = 过渡动画函数输出值
    
    Vres = (1 - p) * Vstart + p * Vend
    

    Vres就是根据曲线动画计算出的不同时刻CSS属性值

    steps步进函数:
    transition-timing-function属性值除了可以为关键字和贝塞尔函数,还可以是steps步进函数,平时用到的情况很少,我能想到的就是进度条效果。steps步进函数将过渡事件划分为大小相等的时间间隔来运行,它有两个参数:

    steps(<integer>[,start | end]?)
    

    第一个参数指定间隔数,值为正整数;第二个参数可选,默认值end,可选值start。参数end可简单理解为第一帧是第一步开始,参数start表示第一帧是第一步结束。

    示例中的例1和例2比较了这两种效果,当鼠标放到第一个元素上时,步进分三次到达终点,每次中间间隔时间一样,当鼠标放到第二元素上时,元素瞬间完成第一次步进,后两次间隔时间一样

    transition-delay

    过渡效果等待时间,默认值0s,属性值秒或毫秒

    transition

    transition定义元素的过渡效果,它是以下几个属性的简写:

     transition-property
     transition-duration
     transition-timing-function
     transition-delay
    

    默认值all 0s ease 0s

    多值

    上面介绍了transition的基本属性,transition可以定义多个属性值一起参与过渡:

    .test {
      transition: width 2s linear 100ms, opacity 2s ease 100ms;
    }
    // 等同于
    .test {
      transition-property: width, opacity;
      transition-duration: 2s;
      transition-timing-function: linear, ease;
      transition-delay: 100ms;
    }
    
    
    
    .test1 {
      transition: width 2s linear 100ms, height 1s ease 0s, opacity 2s linear 100ms;
    }
    // 等同于
    .test1 {
      transition-property: width, height, opacity;
      transition-duration: 2s, 1s;
      transition-timing-function: linear, ease;
      transition-delay: 100ms, 0s;
    }
    

    当transition-property的数量多于对应的transition-delay | transition-timing-function | transition-duration的属性值(属性值的个数大于1个)时,将按顺序开始取值

    过渡阶段

    过度分为前进(forward)和反向(reverse)两个阶段,若前进阶段进行一段时间后进入反向阶段,则反向阶段的初始值是前进阶段结束时的瞬间值。

    以hover为例,当元素在非hover状态时设置transition,则前进和方向过渡效果是一样的;当在元素hover状态时设置transition,则前进状态是hover时设置的为准,反向状态是非hover时设置的为准

    例3和例4对比了两种效果:把鼠标放到例3中的盒子上在移开,前进和反向动画一样,把鼠标放到例4中的盒子上再移开,前进有过渡动画,反向就没有了。

    例5演示了设置前进和反向不同时间的过渡动画

    触发方式

    过渡触发方式有三种:伪类触发、媒体查询和JavaScript触发。

    伪类触发

    例5演示了hover触发。
    例6演示了focus触发,鼠标常按可查看过渡效果。
    例7演示了active触发。

    媒体查询

    @media (max- 1000px){
      .test{
          300px;
      }
    }
    

    JS触发

    test.onclick = function(){
        test.style.width = '300px';
        setTimeout(function(){
            test.style.width = '100px';
        },2000);
    }
    
    优秀文章首发于聚享小站,欢迎关注!
  • 相关阅读:
    NOIP2020 退役记
    CSP2020 游记
    Owenのgalgame 颓废合集
    Atcoder Grand Contest 选做
    xlrd》操作excel 出现的问题:File "D:python37libsite-packagesxlrdformula.py", line 1150, in evaluate_name_formula assert len(tgtobj.stack) == 1
    数据库文档生成代码
    vue 父类组件如何引入子组件
    jna设置回调函数接收c++数组
    在一个vue文件调用另外一个vue文件中的方法
    idea 执行sprinboot 报错 commend line is too long
  • 原文地址:https://www.cnblogs.com/yesyes/p/15356463.html
Copyright © 2011-2022 走看看