css3新增动画属性(过度动画 变形动画 关键帧动画)

目录

过度动画transition

多属性值过渡

 2d变形transform

平移

 应用:实现居中(不要求知道盒子的宽高)

 缩放

 旋转

倾斜

修改变形中心的属性

变形属性的复合写法 

 3D变形动画

3d平移

景深属性(视距)

3D旋转

绕X轴旋转:

 绕Y轴旋转:

绕Z轴旋转

绕面旋转

绕体旋转

背面隐藏属性

保留3d状态(用在没有事件触发时候显示3d效果)

关键帧动画(补间动画)

 定义

css3动画库 animate.css


过度动画transition

transition:要过度的属性名字   持续时间s  延时时间0s  运动曲线;谁做变化写到谁身上!

           (1)写在盒子身上 事件触发完毕以后过渡动画逆序执行一次 最终--最初加过渡!!

           (2)一般来说 ,通过事件触发 :hover :active

               写在事件里:active  事件触发完毕以后过渡动画就结束了  回到最初状态的时候不会再有持续时间!!

transition:要过度的属性名字   持续时间s  延时时间0s  运动曲线;

1. 要过渡的属性必须拥有具体的可以计算的值!! width,height,background-color,opacity...均可过渡
但是display:none/block  visibility:hidden/visible  text-align:left /center不支持过渡;

2. 持续时间属性值必不可少!!

3. 延时时间默认为0s

4. 运动曲线 linear匀速 ease放缓(慢--快--慢)(默认值)  ease-in以快结尾 

多属性值过渡

transition: width 2s 0s linear,height 1s 0s linear,opacity 1s 0s linear.....;

transition:all 1s;//所有要变化的属性的持续时间 延时时间  运动曲线一致  就省略了

transition:1s;//省略的是all

 2d变形transform


行内元素不能进行变形动画

平移

transform:translate(x,y) 水平x 垂直y  +x +y -x -y
transform:translate(300px,500px);
transform:translate(50%,-50%) 自身宽高宽高的一半

单位: +xpx,+ypx 向x轴的正方向(右)和y正方向 (下)

              -xpx ,-ypx x反方向(左) y反方向(上)

              +x% 向右移动了自身宽度的x%

              50%,0% 向右移动了自身宽度的一半!!

              -50%,0% 向左移动了自身宽度的一半!

              +y% 向下移动了自身高度的y%

              +50% 向下移动了自身高度的一半!!!


 

              rem 

              transform:translate(2rem,-3rem)

 应用:实现居中(不要求知道盒子的宽高)

div {
    position:absolute;
    left:50%;
    top:50%;
    transform:translate(-50%,-50%);
}

 缩放

transform:scale(w,h); w,h=0  w<1 缩小 w>1 放大
transform:scale(1.2);等比例放大
           w: 是宽度的缩放倍数
           h: 是高度的缩放倍数
           w=h 那么只需要写一个值即可!!!
            transform: scale(2,2);=== transform: scale(2);
            w,h>1放大
            w,h<1缩小
            w,h = 1不变化
            w,h=0 没有了 消失了

应用: 显示小于12px字体

默认字体:font-size:12px 显示10px字体 行内块+块类型的盒子 +transform:scale(10/12);

 旋转

transform:rotate(ndeg);+ndeg 顺时针旋转 -ndeg 逆时针旋转

 旋转参考原点(中心点)盒子的中心(center center/50% 50%)

     当你只写一个值时,第二个值默认是center

倾斜

transform:skew(xdeg,ydeg); xdeg在x轴有倾斜倾斜度数为xdeg  y在y轴有倾斜

-xdeg 在x正方向的倾斜
+xdeg 在X负方向的倾斜
 +ydeg 向着y轴的负方向倾斜 -ydeg向着y轴的正方向倾斜
transform:skew(xdeg) 只有x轴倾斜

修改变形中心的属性

d,3d修改变形中心
           transform-origin:center center(默认值,中心)
           xpx ypx/ x% y% /right top bottom left center
           transform-origin:100% 0%; 修改变形中心到盒子的右上角

变形属性的复合写法 

变化样式可以使用复合写法,如 transform: scale( ) translate( ) skew( ) rotate( );

变化样式内多个样式值顺序的不同会导致完全不一样的结果

transform:translateX(200px) translateY(300px) rotate(45deg);

css3新增动画属性(过度动画 变形动画 关键帧动画)

transform:rotate(45deg) translateX(200px) translateY(300px) ;

 css3新增动画属性(过度动画 变形动画 关键帧动画)

 3D变形动画


3d坐标系 --》左手定则 食指(y) 中指(z) 大拇指 (x)

css3新增动画属性(过度动画 变形动画 关键帧动画)

3d平移

ttransform:translate3d(x,y,z);z 代表沿着z平移 +z 正方向移动 -z 负方向移动

transform:translateX(300px);
transform:translateY(300px);
transform:translateZ(300px);

transform:translate3d(300px,300px,300px);
transform:translateX(300px) translateY(300px) translateZ(300px);(时间顺序)

 单位px / % /rem

         x 沿着x轴平移

         +zpx 沿着z轴正方向平移(变形盒子的正前方就是z轴 从屏幕出来 +z 穿到屏幕-z)

景深属性(视距)

不为0视距---》形成一个3d效果 ,3d空间---》近大远小

perspective:800px;( 600px--1000px) 800px 就代表你的眼睛到3d变形物体有800px的距离

  保证你的眼睛到box盒子的景深距离是一致的!!

         你就把景深写到盒子.box身上去!

          1. 写在父盒子身上  perspective:600px;

          2. 写在自己身上 加在变形属性里 perspective()

 

 transform:perspective(500px)  rotateY(30deg);

一 般,设置到变形元素的父盒子身上即可 是在事件触发时才会使用景深去营造3d效果

3D旋转

transform:rotate3d(x,y,z,ndeg);
x:1/0 1:沿着X轴有旋转  0沿着x轴没有旋转
y:1/0 1:沿着y轴有旋转  0沿着y轴没有旋转
z:1/0 1:沿着z轴有旋转  0沿着z轴没有旋转
 x: 1/200/300  代表在x轴上有旋转
        x: 0 代表在x轴上没有旋转

ndeg 代表旋转度数

绕X轴旋转:

transform:rotate3d(1,0,0,45deg); 绕着x轴旋转了45deg
等同于transform:rotateX(45deg);

 绕Y轴旋转:

transform:rotate3d(0,1,0,45deg); 绕着y轴旋转了45deg
等同于transform:rotateY(45deg);

绕Z轴旋转

transform:rotate3d(0,0,1,45deg); 绕着z轴旋转了45deg
等同于transform:rotateZ(45deg);

绕面旋转

transform:rotate3d(1,1,0,45deg); 绕着x轴和y轴组成的平面对角线旋转了45deg

绕体旋转

transform:rotate3d(1,1,1,45deg); 绕着x轴和y轴和z轴组成的体对角线旋转了45deg

背面隐藏属性

 backface-visibility: hidden隐藏/visible可见的(默认的);

什么时候一个面会成为反面?

       旋转180deg或者-180deg 浏览器才会认为是反面

保留3d状态(用在没有事件触发时候显示3d效果)

transform-style:preserve-3d保留3d效果/flat回到2d状态(回到最初状态 默认值)

 不需要通过任何鼠标事件 即可保持旋转度数!!

     事件去触发 :hover :active(过渡)  + 景深营造3d空间!!

     无事件触发的情况下 + 保留3d效果的属性营造3d空间!!!

     保留3d效果的属性:

     transform-style:preserve-3d(保留3d效果)/flat(2d效果)

     同样写在父盒子身上!!!

关键帧动画(补间动画)


小车折返: 初始状态 (100px,100px) ----> 树跟前装上去(400px,400px)---->旋转掉头(300px,300px)---->最初位置

动画: 多个状态的持续!!! 不需要事件触发 自发进行

 定义

@keyframes 动画的名称 {
    //几个关键状态  
    0% {
        //最初状态 
        css代码;
    }
    .....
    n%{
        
    }
   
    100% {
        //最终的状态
    }
    
}

 

animation:动画的名称  持续的时间  【运动的曲线  延时的时间  执行的次数  是否往返  运动的状态  动画最后一帧的状态】;  


动画的名称 animation-name:动画的名称;
持续的时间 animation-duration:ns;
运动的曲线 animation-timing-function:linear/ease/ease-in/ease-in-out..
延时的时间 animation-delay: ns;
执行的次数  animation-iteration-count:1默认/2/3/infinite;
是否往返 animation-direction:normal不往返/alternate往返
运动的状态 animation-play-state:running播放/paused停止

动画最后一帧的状态animation-fill-mode: forwards动画保持最后一帧的状态/backwards动画回到第一帧的状态    both:动画没执行时候就保持动画第一帧的状态,执行完毕保持最后一帧状态!

css3动画库 animate.css

网址: Animate.css | A cross-browser library of CSS animations.

引入动画库:

<head>
  <link
    rel="stylesheet"
    href="https://cdnjs.cloudflare.com/ajax/libs/animate.css/4.1.1/animate.min.css"
  />
</head>

使用动画

<h1 class="animate__animated animate__bounce">An animated element</h1>

上一篇:在线直播系统源码,利用css和html实现首页图片轮播效果


下一篇:CSS渐变