空间转换(3D转换 ,动画)

225 阅读1分钟

空间转换(3D转换)

位移

属性transform

两行代码是等价的 ,第二种是复合写法

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

transform: translate3d(100px,100px,100px)

默认情况下看不见z轴上的变化

立体坐标系

image-20220315215524241.png

透视-视距

属性:perspective

透视作用:可以实现元素近大远小的效果

  <title>透视效果</title>
  <style>
    div {
      width: 300px;
      height: 300px;
      background-color: yellowgreen;
      margin: 50px auto;
      /* 当我们想要看见元素在z轴上的变化的时候,需要给被观察的物体添加视距 perspective*/
      
      transform: translate3d(100px,100px,100px);
    }
    /* 如何去使用
    1.代码规范  要给被观察的物体的父元素使用!
    2.视距,一般随意的设置1000px */
    body {
      perspective: 900px;
    }
  </style>
</head>
<body>
  <div></div>
</body

旋转

开启立体呈现: 添加 transform-style: preserve-3d;

3D旋转 : transform: rotate3d(1,1,1,30deg);

左手法则

image-20220315215428190.png

缩放

3D缩放对空间的立体物体做缩放

2D缩放 只能缩放 平面图形的宽度和高度

3D缩放 可以缩放 立体物体的 宽度和高度和厚度

scaleX 缩放宽度

scaleY 缩放高度

scaleZ 缩放厚度 (前面和后面两个面的距离)

scale3d(1,1,1)同时对长宽高做缩放

动画

原理

就是快速将大量的图片切换形成连续的画面

好处

可以实现多个状态间的变化过程,并且动画的过程是可控的(是否暂停,重复播放,最终画面)

用法如下

1.先定义动画

2.使用动画

image-20220317114158110.png

3.动画属性

animation: name duration timing-function delay iteration-count direction fill-mode;

注意:

  • 动画名称和动画时长必须赋值
  • 取值不分先后顺序
  • 如果有2个时间值,第一个时间表示动画时长,第二个时间表示延迟时间

image-20220318201007012.png

补充

1.动画执行完毕状态:animation-fill-mode:both 等于同时设置了forwards和backwards

2.动画执行方向

normal: 先正再正 常用 (默认值)
alternate:先正再反 常用
reverse :先反再反
alternate-reverse:先反再正

3.速度曲线
animation: timing-function:linea(匀速)
ease-in(先慢后快)
easw-out(先快后慢)

拓展

1.过渡有4个属性

  1. 想要实现过渡的CSS属性名:transition-property:width(宽)all(宽高过渡)

  2. 过渡持续的时间:transition-duration:(X)s

  3. 过渡的速度曲线: transition-timing-function: steps (X)

  4. 过渡的延迟时间:transition-delay :(X)s

    复合写法:transition: all 3s steps (4) 5s;

2.如何知道一个CSS属性有没有兼容性问题的?

答:can i use

image-20220318205010354.png

实用技巧

1.ul是多宽 设置位移多宽,400px

2.你想要分几步,写几

3.不要写上forwards

4.加上无限播放

 <title>实用技巧法完成精灵动画</title>
  <style>
    * {
      margin: 0;
      padding: 0;
      box-sizing: border-box;
    }
    ul {
      position: relative;
      list-style: none;
      width: 400px;
      height: 100px;
      margin: 100px auto;

    }
    ul::before {
      content: "";
      position: absolute;
      top: 0;
      left: 0;
      width: 100px;
      height: 100px;
      background-color: pink;
      /* infinit 无限循环 */
      animation: ani 2s steps(4)  infinite;
    }
      /* 实用技巧
    1.ul是多宽 设置位移多宽,400px
    2.你想要分几步,写几
    3.不要写上forwards
    4.加上无限播放 */

    @keyframes ani {
      100%{
        left: 400px;
      }
    }
    li {
      float: left;
      width: 100px;
      height: 100px;
      border: 1px solid #000;
    }
  </style>
</head>
<body>
  <ul>
    <li>1</li>
    <li>2</li>
    <li>3</li>
    <li>4</li>
  </ul>
</body>
</html>

补充知识

谷歌和edge 浏览器(现在edge内核也是使用谷歌)没有效果,而ie和火狐有效果,谷歌浏览器对于大于大图片的,结合背景效果的时候不稳定,有bug