• 20-CSS过渡


    一、transition过渡属性

    1、复合属性(设置到一起)

    transition:all 2s linear 2s;
    
    all指监听的该div的所有属性,可以指定一个属性
    2s是指动画效果完成时间
    linear 匀速,默认值
    2s 延迟2s才变
    
    
    注:display:none/block 不支持display这个属性的过渡
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    例:
    在这里插入图片描述

    设置在父盒子上,监听height变化,复合属性中不能并列写多个监听属性,要么一个(height),要么所有(all)

    2、单一属性

    复合属性:
    transition:all 5s linear 3s;
    
    单一属性:
    //检索或设置对象中的参与过渡的属性
    transition-property:all; 
    //检索或设置对象过渡的持续时间
    transition-duration:5s
    //检索或设置对象延迟过渡的时间
    transition-delay:3s
    //检索或设置对象中过渡的动画类型
    transition-timing-function:linear
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    二、怎么实现display:none到block的过渡呢?

    在这里插入图片描述

    增加overflow:hidden;溢出隐藏,默认不现实。鼠标移入后慢慢展开

    三、速度属性

    在这里插入图片描述

    使用方法:
    (1)复合属性设置:

    transition:all 2s ease;   #前边两个值可以变
    
    • 1

    (2)单一属性

    transition-timing-function:ease;
    
    • 1

    四、tranform:translate

    将元素向指定方向移动

    向左移动:
    tranform:translateX(-100px)
    向右移动:
    tranform:translateX(100px)
    向上移动:
    tranform:translateY(-100px)
    向右下角移动:
    tranform:translate(100px 200px;)
    往右移自身宽度的100%:
    tranform:translateX(100%) 
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    常用用法:
    动画效果中盒子内默认不显示的元素初始时设置transform:translateX/Y()移出盒子,等到用户点击时transform:translateX/Y(0px)移入盒子。

    五、记住

    1、position和transform区别

    在使用position进行动画效果移动时,会出现动画效果不流畅的问题,是因为在GPU渲染时,导致大量回流重排,transform是在独立涂层渲染,不会导致浏览器回流重拍,动画效果流畅。

    原理:
    position设置top/left、margin、padding等的控制位置的变化都会导致浏览器的回流重排,即使position定位脱离文档流,在GPU渲染时会在合成图层进行渲染,导致浏览器重排

    设置translate,脱离文档流,GPU渲染时不会在合成涂层上渲染,会在独立涂层上渲染。在浏览器层面和GPU层面都是独立涂层渲染。

    2、浏览器什么情况下会创建一个独立涂层呢?

    1. 3D 或css transform
    2. video视频标签
    3. CSS filters属性
    4. 元素覆盖时,比如z-index

    3、总结

    1、transform 会使用 GPU 硬件加速,性能更好;position + top/left 会触发大量的重绘和回流,性能影响较大。

    2、硬件加速的工作原理是创建一个新的复合图层,然后使用合成线程进行渲染。

    3、3D 动画 与 2D 动画的区别;2D动画会在动画开始和动画结束时触发2次重新渲染。

    4、使用GPU可以优化动画效果,但是不要滥用,会有内存问题。

    六、tranform:scale缩放

    1、scale放大

    同样会使GPU在独立图层进行渲染,性能高。
    使原有动画默认从中心位置放大x倍显示

    scale为一个值表示从x轴和y轴同时放大:

    //图片变小为0.5倍
    tansform:scale(0.5)
    
    • 1
    • 2

    在这里插入图片描述

    //图片倒放为1.5倍
    tansform:scale(-1.5)
    
    • 1
    • 2

    在这里插入图片描述
    只从某一个方向单独放大

    scaleX()
    scaleY()
    
    • 1
    • 2

    单方向缩放,图片会变形,一般不用。

    2、改变中心点

    transform-origin:center;默认中心位置
    left top 左上角
    left bottom
    left center
    right top
    ...
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    transform-origin:left top;在这里插入图片描述

    3、position和scale相比

    scale优势:
    效果美观、回流重排影响小,单独涂层进行渲染,性能好

    例:移入从中心位置慢慢变大,移走慢慢变小,并且溢出隐藏
    在这里插入图片描述

    七、旋转

    transform:rotate(80deg) 平面内顺时针旋转
    transform:rotateX()  3维平面内沿x轴旋转
    transform:rotateY()
    transform:rotateZ() 
    
    • 1
    • 2
    • 3
    • 4

    可以通过transform-origin改变旋转点

    八、transform多属性写到一起时要主意顺序

    位移和放大,先写位移后放大
    位移和旋转,先位移后旋转,否则沿着x轴位移会走偏

    九、倾斜

    transform:skew(30deg,30deg) 
    skew(30deg,30deg) 正值,往右下角拉
    skewX 正值,表示拽盒子右下角,往右边拉动,形成30deg
    负值,拽左下角,往左拉动
    skewY  正值,表示拽盒子右下角,往下边拉动
    负值,拽左下角,往下拉动
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    transform:skewX(30deg)
    在这里插入图片描述

    弊端:
    必须是在和用户交互时(鼠标点击、移入)才会发生改变

  • 相关阅读:
    Linux (Ubuntu)c编程 (入门必看)
    大数据技术基础实验十三:Kafka实验——订阅推送示例
    1200*A. Flipping Game(前缀和)
    c++征途 --- 类和对象 --- 多态
    学习nginx的一点记录
    K8s最基本概念
    CEAC 之《企业信息化管理》1
    大数据时代精准营销是提升品牌竞争力的核心
    【Python机器学习】自动化特征选择——迭代特征选择
    「数据结构详解·一」树的初步
  • 原文地址:https://blog.csdn.net/CapejasmineY/article/details/126218912