• css3之动画


    1 2D转换

    转换是css3中具有颠覆性的特征之一,可以实现元素的位移、旋转、缩放等效果

    转换可以理解为变形

    • 移动:translate
    • 旋转:rotate
    • 缩放:scale

    1.1 2D转换之移动translate

    2D移动是2D转换里面的一种功能,可以改变元素在页面中的位置,类似定位。

    语法:

    transform:translate(x,y); 或者分开写
    transform:translateX(n);
    transform:translateY(n);

    重点:

    • 定义2D转换中的移动,沿着X和Y轴移动元素
    • translate最大的优点:不会影响到其他元素的位置
    • translate中百分比单位是相对于自身元素的translate:(50%,50%);
    • 对行内标签没有效果

    1. 我们translate里面的参数是可以用%的

    2.如果里面的参数是%移动的距离是 盒子自身的宽度或者高度来对比的

    1.2 2D旋转之rotate

    2D旋转指的是让元素在2维平面内顺时针旋转或者逆时针旋转

    语法:

    transform:rotate(度数)

    重点:

    • rotate里面跟度数,单位是deg比如rotate(45deg)
    • 角度为正时,顺时针,负时,为逆时针
    • 默认旋转的中心点是元素的中心点

    1.3 2D转换中心点transform-origin

    我们可以设置元素的转换中心点

    语法:

    transform-origin:x y;

    重点:

    • 注意后面的参数x和y用空格隔开
    • x y 默认转换的中心点是元素 的中心点(50% 50%)
    • 还可以给x y 设置像素或者方位名词(top bottom left right center)

    1.4 2D转换之缩放scale

    缩放,顾名思义,可以放大和缩小。只要给元素添加上了这个属性就能控制它放大还是缩小。

    语法:

    transform:scale(x,y);

    注意:

    注意其中x和y用逗号分隔

    • transform:scale(1,1):宽和高都放大一倍,相当于没有放大
    • transform:scale(2,2):宽和高都放大了两倍
    • transform:scale(2):只写一个参数,第二个参数则和第一个参数一样,相当于scale(2,2)
    • transform:scale(0.5,0.5):缩小
    • scale缩放最大的优势:可以设置转换中心点缩放,默认以中心点缩放的,而且不影响其他盒子

    2 动画

    动画(animation)是CSS3中具有颠覆性的特征之一,可通过设置多个节点来精确控制一个或一组动画,常用来实现复杂的动画效果

    相比较过渡,动画可以实现更多变化,更多控制,连续自动播放等效果。

    2.1 动画的基本使用

    制作动画分为两步:

    1.先定义动画,

    2.再使用(调用)动画

    动画序列

    • 0%是动画的开始,100%是动画的完成,这样的规则就是动画序列。
    • 再@keyframes中规定某项css样式,就能创建由当前样式逐渐改为新样式的动画效果。
    • 动画是使元素从一种样式逐渐变化为另一种样式的效果,您可以改变任意多的样式任意多的次数。
    • 请用百分比来规定变化发生的时间,或用关键词“from”和“to”,等同于0%和100%。
          @keyframes move {
            /* 开始状态 */
            0% {
              transform: translateX(0px);
            }
            /* 结束状态 */
            100% {
              transform: translateX(1000px);
            }
          }
          div {
             200px;
            height: 200px;
            background-color: pink;
            /* 调用动画 */
            animation-name: move;
            /* 持续时间 */
            animation-duration: 2s;
          }

    常用的动画属性:

     动画的简写属性

    animation:动画名称 持续时间 运动曲线 何时开始 播放次数 是否反方向 动画起始或者结束的状态

     打字机效果:

          div {
            overflow: hidden;
            font-size: 20px;
            width: 0px;
            height: 30px;
            background-color: pink;
            animation: w 4s steps(10) forwards;
            white-space: nowrap;
          }
          @keyframes w {
            0% {
              width: 0;
            }
            100% {
              width: 200px;
            }
          }

    奔跑的小熊:

          div {
            position: absolute;
            width: 200px;
            height: 100px;
            background: url(/images/bear.png) no-repeat;
            animation: bear 1s steps(8) infinite, move linear 4s forwards;
          }
          body {
            background-color: #ccc;
          }
          @keyframes bear {
            0% {
              background-position: 0 0;
            }
            100% {
              background-position: -1600px 0;
              /* transform: translateX(-50%); */
            }
          }
          @keyframes move {
            0% {
              left: 0;
            }
            100% {
              left: 50%;
            }
          }

    3 3D转换

    3.1 三维坐标系

    三维坐标系其实就是指立体空间,立体空间是由3个轴共同组成的。

    x轴:水平向右  注意:x右边是正值,左边是负值

    y轴:垂直向下  注意:y下面是正值,上面是负值

    z轴:垂直屏幕  注意:往外面是正值,往里面是负值

    3.2 3D移动translate3d

    3D移动在2D移动的基础上多加了一个可以移动的方向,就是z轴方向

    • transform:translateX(100px);仅仅是在x轴上移动
    • transform:translateY(100px);仅仅 是在y轴上移动
    • transform:translateZ(100px);仅仅是在z轴上移动(注意:translateZ一般用px单位)
    • transform:translate3d(x,y,z);其中x、y、z分别指要移动的轴的方向的距离

    3.3 透视perspective

     在2D平面产生近大远小视觉立体,但是只是效果二维的

    • 如果想要在网页产生3D效果需要透视(理解成3D物体投影在2D平面内)
    • 模拟人类的视觉位置,可认为安排一只眼睛去看
    • 透视我们也称为视距:视距就是人的眼睛到屏幕的距离
    • 距离视觉点越近的在电脑平面成像越大,越远成像越小
    • 透视的单位是像素

    3.4 3D旋转之rotate3d

    3D旋转指可以让元素在三维平面内沿着x轴,y轴,z轴或者自定义轴进行旋转

    语法:

    • transform:rotateX(45deg):沿着x轴正方向旋转45度
    • transform:rotateY(45deg):沿着y轴正方向旋转45度
    • transform:rotateZ(45deg):沿着z轴正方向旋转45度
    • transform:rotate3d(x,y,z,deg):沿着自定义轴旋转deg为角度(了解即可)

    3.5 3D呈现transform-style

    • 控制子元素是否开启三维立体环境
    • transform-style:flat子元素不开启3d立体空间,默认的
    • transform-style:preserve-3d;子元素开启立体空间
    • 代码写给父级,但是影响的是子盒子
    • 这个属性很重要,后面必用

     3D导航栏案例:

    <style>
        *{
          margin: 0;
          padding: 0;
        }
        ul{
          margin: 100px;
        }
        ul li{
          float: left;
           120px;
          height: 35px;
          margin-right: 20px;
          list-style: none;
          perspective: 500px;
        }
        .box{
          position: relative;
           100%;
          height: 100%;
          transform-style: preserve-3d;
          transition: all .5s;
        }
        .front,.bottom{
          position: absolute;
          top: 0;
          left: 0;
           100%;
          height: 100%;
        }
        .front{
          background-color: pink;
          z-index: 1;
          transform: translateZ(17.5px);
        }
        .bottom{
          background-color: purple;
          transform: translateY(17.5px) rotateX(-90deg);
        }
        .box:hover{
          transform: rotateX(90deg);
        }
      </style>
    </head>
    <body>
      <ul>
        <li>
          <div class='box'>
            <div class='front'>hello</div>
            <div class='bottom'>world</div>
          </div>
        </li>
      </ul>
    </body>

    旋转木马案例:

    <!DOCTYPE html>
    <html lang='en'>
    <head>
      <meta charset='UTF-8'>
      <title>Title</title>
      <style>
        body{
          perspective: 740px;
        }
        section {
          position: relative;
          width: 300px;
          height: 300px;
          margin: 300px auto;
          transform-style: preserve-3d;
          animation: rotate 5s linear infinite;
        }
        section:hover{
          animation-play-state: paused;
        }
        @keyframes rotate {
          0%{
            transform: rotateX(0deg);
          }
          100%{
            transform: rotateX(-360deg);
          }
        }
        section div {
          position: absolute;
          top: 0;
          left: 0;
          width: 100%;
          height: 100%;
          background: url("dog.jpg") no-repeat;
        }
        section div:nth-child(1){
          transform: translateZ(300px);
        }
        section div:nth-child(2){
          transform: rotateY(60deg) translateZ(300px);
        }
        section div:nth-child(3){
          transform: rotateY(120deg) translateZ(300px);
        }
        section div:nth-child(4){
          transform: rotateY(180deg) translateZ(300px);
        }
        section div:nth-child(5){
          transform: rotateY(240deg) translateZ(300px);
        }
        section div:nth-child(6){
          transform: rotateY(300deg) translateZ(300px);
        }
      </style>
    </head>
    <body>
      <section>
        <div></div>
        <div></div>
        <div></div>
        <div></div>
        <div></div>
        <div></div>
      </section>
    </body>
    </html>
    View Code
  • 相关阅读:
    HTTP之multipart/formdata格式
    PHP之什么是CGI
    ObjectiveC之多语言的预编译头
    JS之addEventListener
    JS之要点Review
    iOS之JSON框架的选择
    iOS之Block笔记
    iOS之HTTP框架的选择
    PHP之自动加载对象
    HTTP之LastModified和ETag
  • 原文地址:https://www.cnblogs.com/fqh2020/p/15929829.html
Copyright © 2020-2023  润新知