• CSS3绘图与动画


    <meta http-equiv="X-UA-Compatible" content="ie=edge">


     1、CSS3-2D转换属性:transform

    CSS3 允许您使用 2D 转换来对元素进行格式化。

    可以利用transform功能来实现文字或图像的变形处理.

    转换类型

      1) rotate:旋转 
        用法:transform: rotate(45deg); 
        共一个参数“角度”,单位deg为度的意思,正数为顺时针旋转,负数为逆时针旋转,上述代码作用是顺时针旋转45度。默认参照中心点

      2) translate:位移
        用法:transform: translate(45px) 或者 transform: translate(45px, 150px); 
        参数表示移动距离,单位px,一个参数时:表示水平方向的移动距离;两个参数时:第一个参数表示水平方向的移动距离,第二个参数表示垂直方向的移动距离。

      3) skew:扭曲/倾斜
        用法:transform: skew(30deg)  或者 transform: skew(30deg, 30deg);
        参数表示倾斜角度,单位deg 一个参数时:表示水平方向的倾斜角度; 两个参数时:第一个参数表示水平方向的倾斜角度,第二个参数表示垂直方向的倾斜角度。

      4)  scale:缩放

       用法:transform:scale(0.8),

       参数:表示放大或缩小的倍数,某些浏览器不兼容 分数形式 如:1/2

       注:其作用相当于将元素当成一个图片,整体放大,包括边框

      注:一个定位若不加left及top则在原位置

      4)matrix:混合     http://blog.csdn.net/flqbestboy/article/details/78110019

    用法:transform:matrix(1,0,0,1,-200,-200);

    matrix(n,n,n,n,n,n),定义 2D 转换,使用六个值的矩阵。
    下面说明该6个参数的值:
    将6个参数分别定义为a,b,c,d,e,f

    如果e和f不为0,则表示该内容需要进行位移,即:
    1  0  x
    0  1  y
    0  0  1
    如果6个参数的形式为(a,0,0,d,e,f)
    则表示该内容要进行缩放,a表示在X轴上缩放的比例,d表示在Y轴上缩放的比例
    x  0  0
    0  y  0
    0  0  1
    如果6个参数的形式为(a,b,c,d,e,f),并且a,b,c,d都小于1,且a=c,b=-d;
    则表示该内容要进行旋转,设定旋转角度为t,则6个参数的值为(cost,sint,-sint,cost,e,f),所以一般见到前4个参数都为小于1的,
    且b和c为相反数的,即为旋转角度
    cos(x)   -sin(x)   0
    sin(4)    cos(x)   0
      0            0        1
    如果6个参数的形式为(a,b,c,d,e,f),并且b,c都小于1,而a,d都等于1
    则表示需要拉伸,设定拉伸角度为tx和ty,则6个参数的值为(1,tanθy,tanθx,1,e,f),注意第2个参数和第3个参数分别代表的意义
    θx表示x轴倾斜的角度,θy表示y轴,两者并无关联
    1         tan(y)   0
    tan(x)     1       0
    0             0      1


    手机(retina)dpr:
    某些安卓机不支持像素小于1的尺寸,
    手机一像素问题??

    转换基准点:transform-origin

    在使用transform方法进行文字或图像的变形时,是以元素的中心点为基准点进行的。使用transform-origin属性,可以改变变形的基准点。 
        用法:transform-origin: 10px 10px; 
        共两个参数,表示相对左上角原点的距离,单位px,第一个参数表示相对左上角原点水平方向的距离,第二个参数表示相对左上角原点垂直方向的距离;
        两个参数除了可以设置为具体的像素值,其中第一个参数可以指定为left、center、right,第二个参数可以指定为top、center、bottom。

    过渡效果:transition

    CSS3 过渡是元素从一种样式逐渐改变为另一种的效果。 
        规定您希望把效果添加到哪个 CSS 属性上 
        规定效果的时长 
        用法:transition: all 1s 2s linear;


    获取贝塞尔方法工具 贝塞尔曲线用法  http://cubic-bezier.com/#.17,.67,.83,.67

    transition-timing-function:cubic-bezier(.17,.67,.93,.78);

    2、CSS3-3D转换属性:transform

    CSS3 允许您使用 3D 转换来对元素进行格式化。




    transform-style属性

      transform-style属性是3D空间一个重要属性,指定嵌套元素如何在3D空间中呈现。他主要有两个属性值:flat和preserve-3d。transform-style: flat | preserve-3d

      transform-style属性需要设置在父元素中,并且高于任何嵌套的变形元素。

    perspective属性

      perspective属性对于3D变形来说至关重要。该属性会设置查看者的位置,并将可视内容映射到一个视锥上,继而投到一个2D视平面上。如果不指定透视,则Z轴空间中的所有点将平铺到同一个2D视平面中,并且变换结果中将不存在景深概念。

      其实对于perspective属性,我们可以简单的理解为视距,用来设置用户和元素3D空间Z平面之间的距离。而其效应由他的值来决定,值越小,用户与3D空间Z平面距离越近,视觉效果更令人印象深刻;反之,值越大,用户与3D空间Z平面距离越远,视觉效果就很小。

      在3D变形中,对于某些变形,例如下面的示例演示的沿Z轴的变形,perspective属性对于查看变形的效果来说必不可少

      用法:perspective:none |

      perspective属性包括两个属性:none和具有单位的长度值。其中perspective属性的默认值为none,表示无限的角度来看3D物体,但看上去是平的。另一个值接受一个长度单位大于0的值。而且其单位不能为百分比值。值越大,角度出现的越远,从而创建一个相当低的强度和非常小的3D空间变化。反之,此值越小,角度出现的越近,从而创建一个高强度的角度和一个大型3D变化。

      perspective也可以设置在transform属性中 transform: perspective(600px);

      比较: 
        perspective属性可以取值为none或长度值;而perspective()函数取值只能大于0,如果取值为0或比0小的值,将无法激活3D空间; 
        perspective属性用于变形对像父元素;而perspective()函数用于变形对像自身,并和transform其他函数一起使用。

    transform属性

      三维变换使用基于二维变换的相同属性,如果您熟悉二维变换,你们发现3D变形的功能和2D变换的功能相当类似。CSS3中的3D变换主要包括以下几种功能函数:

        3D位移:CSS3中的3D位移主要包括translateZ()和translate3d()两个功能函数;

          其基本语法如下:
            translate3d(tx,ty,tz) 扑克牌translate3D效果 
            tx:代表横向坐标位移向量的长度; 
            ty:代表纵向坐标位移向量的长度; 
            tz:代表Z轴位移向量的长度。此值不能是一个百分比值,如果取值为百分比值,将会认为无效值。

        3D旋转:CSS3中的3D旋转主要包括rotateX()、rotateY()、rotateZ()和rotate3d()四个功能函数;

          其基本语法如下:
            rotate3d(x,y,z,a) 扑克牌rotate3D效果展示 
            x:是一个0到1之间的数值,主要用来描述元素围绕X轴旋转的矢量值; 
            y:是一个0到1之间的数值,主要用来描述元素围绕Y轴旋转的矢量值; 
            z:是一个0到1之间的数值,主要用来描述元素围绕Z轴旋转的矢量值; 
            a:是一个角度值,主要用来指定元素在3D空间旋转的角度,如果其值为正值,元素顺时针旋转,反之元素逆时针旋转。

        3D缩放:CSS3中的3D缩放主要包括scaleZ()和scale3d()两个功能函数;

          其基本语法如下:
            scale3d(sx,sy,sz) 扑克牌scale3D效果 
            sx:横向缩放比例; 
            ysy:纵向缩放比例; 
            z sz:Z轴缩放比例;

         scaleZ()和scale3d()函数单独使用时没有任何效果,需要配合其他的变形函数一起使用才会有效果

        3D矩阵:CSS3中3D变形中和2D变形一样也有一个3D矩阵功能函数matrix3d()。

        CSS3中的3D矩阵要比2D中的矩阵复杂的多了,从二维到三维,是从4到9;而在矩阵里头是3*3变成4*4,9到16了。话说又说回来,对于3D矩阵而言,本质上很多东西都与2D一致的,只是复杂程度不一样而已。 3D矩阵即为透视投影,推算方法与2D矩阵类似:


     代码表示就是:
        matrix3d(sx, 0, 0, 0, 0, sy, 0, 0, 0, 0, sz, 0, 0, 0, 0, 1)

    注:支持投影:-webkit-box-reflect:below 10px -webkit-linear-gradient(top,rgba(0,0,0,0) 50%,rgba(0,0,0,0.7) 100%);

    3、关键帧动画

      @keyframes 规则用于创建动画

      在 @keyframes 中规定某项 CSS 样式,就能创建由当前样式逐渐改为新样式的动画效果。

      动画是使元素从一种样式逐渐变化为另一种样式的效果。

      请用百分比来规定变化发生的时间,或用关键词 "from" 和 "to",等同于 0% 和 100%,0% 是动画的开始,100% 是动画的完成。

      为了得到最佳的浏览器支持,应该始终定义 0% 和 100% 选择器

      必须设置的项: 
        规定动画的名称 
        规定动画的时长

      @keyframes test{ 
        from{} 
        to{} 
      }

      @keyframes test{ 
        0%{} 
        50%{} 
        ...... 
        100%{} 
      }

      animation:test 2s both






    解决Chrome动画”卡顿”的办法 

    http://blog.bingo929.com/transform-translate3d-translatez-transition-gpu-hardware-acceleration.html

      为动画DOM元素添加CSS3样式-webkit-transform:transition3d(0,0,0)或-webkit-transform:translateZ(0);,这两个属性都会开启GPU硬件加速模式,从而让浏览器在渲染动画时从CPU转向GPU,其实说白了这是一个小伎俩,也可以算是一个Hack,-webkit-transform:transition3d和-webkit-transform:translateZ其实是为了渲染3D样式,但我们设置值为0后,并没有真正使用3D效果,但浏览器却因此开启了GPU硬件加速模式。
      这种GPU硬件加速在当今PC机及移动设备上都已普及,在移动端的性能提升是相当显著地,所以建议大家在做动画时可以尝试一下开启GPU硬件加速。
    当然也可以这样开启所有浏览器的GPU硬件加速:

    webkit-transform: translateZ(0);
    -moz-transform: translateZ(0);
    -ms-transform: translateZ(0);
    -o-transform: translateZ(0);
    transform: translateZ(0);

    webkit-transform: translate3d(0,0,0);
    -moz-transform: translate3d(0,0,0);
    -ms-transform: translate3d(0,0,0);
    -o-transform: translate3d(0,0,0);
    transform: translate3d(0,0,0);




  • 相关阅读:
    构建之法阅读笔记02
    NOPI2018 货币系统 bool完全背包 bitset优化转移
    P4551 最长异或路径 Trie经典应用 bitset应用
    算法分析与设计实验报告 Project2
    ARC-114 C- Sequence Scores 计数
    P2401 不等数列 简单计数DP
    Gym-102569C Manhattan Distance 曼哈顿距离的转换 二分
    GYM-102893J Straight 模拟 思维
    算法分析与设计实验报告 Project1
    CodeForces Round 705-D GCD of an Array 数论 乱搞 or 线段树 + 质因子分解科技
  • 原文地址:https://www.cnblogs.com/fanlinqiang/p/7741203.html
Copyright © 2020-2023  润新知