H5C3 13-1 2D转换 动画

119 阅读4分钟

1.transform:translate;不改变其他盒子的位置

1.1.对行内标签没有效果
1.2. 参数%移动,是自身宽度或者高度的%来对比
可以配合定位来实现盒子在盒子里面水平垂直居中
1.3对行内元素无效

1.transform:translate(100px,100px)
2.transform:translateX(100px)
3.transform:translateY(200px)
一、rotate

1.transform:rotate(30deg)
可以让三角小图标鼠标经过旋转180°

二、设置元素旋转中心点(transform-origin)

1.transform-origin: x y;
2. 重要知识点

  • 注意后面的参数 x 和 y 用空格隔开
  • x y 默认旋转的中心点是元素的中心 (50% 50%),等价于 center center
  • 还可以给 x y 设置像素或者方位名词(topbottomleftrightcenter)
三、2D 转换之 scale
  1. 语法

    transform: scale(x, y)
    
  2. 知识要点

    • 注意,x 与 y 之间使用逗号进行分隔
    • transform: scale(1, 1): 宽高都放大一倍,相当于没有放大
    • transform: scale(2): 如果只写了一个参数,第二个参数就和第一个参数一致
    • transform:scale(0.5, 0.5): 缩小
    • scale 最大的优势:可以设置转换中心点缩放,默认以中心点缩放,而且不影响其他盒子
四、 2D 转换综合写法以及顺序问题

简写中间给空格.

   div:hover {
     transform: translate(200px, 0) rotate(360deg) scale(1.2)
   }
五、 动画(animation)
  1. 语法格式(定义动画)

    @keyframes 动画名称 {
        0% {
            width: 100px;
        }
        100% {
            width: 200px
        }
    }
    
  2. 语法格式(使用动画)

   div {
   	/* 调用动画 */
       animation-name: 动画名称;
    	/* 持续时间 */
    	animation-duration: 持续时间;
   }
  1. 动画序列

    • 0% 是动画的开始,100 % 是动画的完成,这样的规则就是动画序列
    • 在 @keyframs 中规定某项 CSS 样式,就由创建当前样式逐渐改为新样式的动画效果
    • 动画是使元素从一个样式逐渐变化为另一个样式的效果,可以改变任意多的样式任意多的次数
    • 用百分比来规定变化发生的时间,或用 fromto,等同于 0% 和 100%
六、动画常见属性
  1. 代码演示

    div {
      width: 100px;
      height: 100px;
      background-color: aquamarine;
      /* 动画名称 */
      animation-name: move;
      /* 动画花费时长 */
      animation-duration: 2s;
      /* 动画速度曲线 */
      animation-timing-function: ease-in-out;
      /* 动画等待多长时间执行 */
      animation-delay: 2s;
      /* 规定动画播放次数 infinite: 无限循环 */
      animation-iteration-count: infinite;
      /* 是否逆行播放 */
      animation-direction: alternate;
      /* 动画结束之后的状态 */
      animation-fill-mode: forwards;
    }
    
    div:hover {
      /* 规定动画是否暂停或者播放 */
      animation-play-state: paused;
    }
    
七、 动画简写方式
  1. 动画简写方式
/* animation: 动画名称 持续时间 运动曲线 何时开始 播放次数 是否反方向 起始与结束状态 */
animation: name duration timing-function delay iteration-count direction fill-mode
  1. 知识要点
  • 简写属性里面不包含 animation-paly-state
  • 暂停动画 animation-paly-state: paused; 经常和鼠标经过等其他配合使用
  • 要想动画走回来,而不是直接调回来:animation-direction: alternate
  • 盒子动画结束后,停在结束位置:animation-fill-mode: forwards
  1. 代码演示

    animation: move 2s linear 1s infinite alternate forwards;
    
八.通过steps实现打字机效果

一般会忽略最后一帧

<style>
     div {
       overflow: hidden;
       width: 0;
       height: 30px;
       background-color: pink;
       white-space: nowrap;
       animation: move 7s steps(7);
     }
     @keyframes move {
       0% {
         width: 0;
       }
       100% {
         width: 150px;
       }
     }
   </style>
 </head>
 <body>
   <div>某某某是个憨批</div>
 </body>
</html>
九、奔跑的熊大

一般会忽略最后一帧
总结:
1.这个效果是通过背景图片来完成
2.计算单个的熊图片高宽,设定盒子大小
3.定义动画,并且调用动画通过stpes几步来实现动画效果
4.再通过背景定位来改变他的位置,是负值.
5.定义另一个动画,通过绝对定位来改变的小熊从屏幕跑出来的位置.
6.再上一个动画调用后面加逗号隔开添加新的动画.

  1. 代码演示
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
    <style>
        body {
            background-color: #ccc;
        }      
        div {
            position: absolute;
            width: 200px;
            height: 100px;
            background: url(media/bear.png) no-repeat;
            /* 我们元素可以添加多个动画, 用逗号分隔 */
            animation: bear .4s steps(8) infinite, move 3s forwards;
        }
        
        @keyframes bear {
            0% {
                background-position: 0 0;
            }
            100% {
                background-position: -1600px 0;
            }
        }
        
        @keyframes move {
            0% {
                left: 0;
            }
            100% {
                left: 50%;
                /* margin-left: -100px; */
                transform: translateX(-50%);
            }
        }
    </style>
</head>

<body>
    <div></div>
</body>

</html>
十、F4

这个案例的难点在于:如何让外面的大盒子走完整个屏幕完了 才从头开始,确定动画结束
需要用到函数cale(100% + 1000px)永远比盒子大这么多
大盒子的定位 一定要给fixed不然会惩处滚动条

@keyframes big {
        0% {
          /* 动画开始也是从-1000px开始 */
          left: -1000px;
        }
        100% {
          /* 用函数 让盒子走整个盒子的大小还要加上10000px 这样才能让外面的大盒子走完屏幕 */
          left: calc(100% + 1000px);
          transform: translate(-50%);
        }
      }
<!DOCTYPE html>
<html lang="zh-CN">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <link rel="stylesheet" href="./css/base.css" />
    <title>Document</title>
    <style>
      .box {
        position: fixed;
        /* 给一个具体赋值让他从屏幕外面开始 */
        left: -1000px;
        bottom: 0;
        width: 100%;
        height: 176px;
        animation: big 12s infinite linear;
      }
      .box div[class^="box"] {
        float: left;
        margin: 0 50px;
        animation: run 0.5s steps(2) infinite;
      }
      .box1 {
        width: 154px;
        height: 121px;
        background: url(./images/txgc_6d0e9e5.png) no-repeat;
      }
      .box2 {
        width: 160px;
        height: 176px;
        background: url(./images/txgh_fee2457.png) no-repeat;
      }
      .box3 {
        width: 161px;
        height: 149px;
        background: url(./images/txgl_c15cfd8.png) no-repeat;
      }
      .box4 {
        width: 165px;
        height: 157px;
        background: url(./images/txgq_d281c9b.png) no-repeat;
      }
      @keyframes big {
        0% {
          /* 动画开始也是从-1000px开始 */
          left: -1000px;
        }
        100% {
          /* 用函数 让盒子走整个盒子的大小还要加上10000px 这样才能让外面的大盒子走完屏幕 */
          left: calc(100% + 1000px);
          transform: translate(-50%);
        }
      }
      @keyframes run {
        0% {
          background-position: 0 0;
        }
        100% {
          background-position: -308px 0;
        }
      }
    </style>
  </head>
  <body>
    <div class="box">
      <div class="box1"></div>
      <div class="box2"></div>
      <div class="box3"></div>
      <div class="box4"></div>
    </div>
  </body>
</html>
十一、关于鼠标经过速度慢,鼠标离开快的

当鼠标经过的时候,transition的时间长一点
离开的时候,时间短一点就可以了