移动web总结二

294 阅读5分钟

一、空间转换

1.目标

  • 使用transform属性实现元素在空间内的位移、旋转、缩放等效果

2.空间转换说明

  1. 空间:是从坐标轴角度定义的。x 、y 和z 三条坐标轴构成了一个立体空间,z轴位置与视线方向相同
  2. 空间转换也叫3D转换

3.属性

  • transform

1、空间位移

1.目标

  • 使用translate实现元素空间位移效果

2.语法

  • transform: translate3d(x, y, z)
  • transform: translateX(值)
  • transform: translateY(值)
  • transform: translateZ(值)

3.取值

  • 像素单位数值
  • 百分比 (注意:这里的百分比指的是自身的百分比)

4.注意点

  1. 3D移动简写的方式:transform:translate3d(x,y,z)中,xyz是不能省略的,如果没有数值就直接写0

2、透视

Snipaste_2022-05-28_15-52-15.png

Snipaste_2022-05-28_15-52-25.png

1.目标

  • 使用perspective属性实现透视效果

2.属性(注意:属性是添加给父级)

  • perspective: 值
  • 取值:像素单位数值, 数值一般在400px – 1200px
  • 透视距离也称为视距,所谓的视距就是人的眼睛到屏幕的距离。

3.作用

  • 空间转换时,为元素添加近大远小、近实远虚视觉效果

4.说明

  • 透视又叫做视距、景深,设置给使用了3D元素的最近一级的父元素(亲爸爸)
  • perspective只是增加了近大远小的效果,并不是真正开启3d
  • 在2D平面产生近大远小的视觉立体,但是只是效果二维的

3、空间旋转

1.目标

  • 使用rotate实现元素空间旋转效果

2.语法

  • transform: rotateZ(值)
  • transform: rotateX(值)
  • transform: rotateY(值)
  • transform: rotate3d(x,y,z,45deg)

3.判断旋转方向

  • 左手原则:左手握住旋转轴, 拇指指向正值方向, 手指弯曲方向为旋转正值方向。

Snipaste_2022-05-28_15-52-46.png

4.扩展

  1. rotate3d(x, y, z, 角度度数) :用来设置自定义旋转轴的位置及旋转的角度
  2. xyz是表示旋转轴的矢量,是表示你是否希望沿着该轴旋转,最后一个值表示旋转的角度
  3. x,y,z 取值为0-1之间的数字
  4. rotate属性不属于3D转换

4、立体呈现

Snipaste_2022-05-28_15-53-07.png

1.目标

  • 使用transform-style: preserve-3d呈现立体图形

2.呈现立体图形步骤

  1. 盒子父元素添加transform-style: preserve-3d;
  2. 按需求设置子盒子的位置(位移或旋转)

3.注意

  • 空间内,转换元素都有自已独立的坐标轴,互不干扰
  • transform-style:flat 子元素不开启3d立体空间,默认的。

4.3D导航案例

  1. 代码
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
    <style>
      * {
        margin: 0;
        padding: 0;
        box-sizing: border-box;
      }
      ul {
        width: 300px;
        height: 40px;
        margin: 50px auto;
      }
      li {
        float: left;
        height: 40px;
        list-style: none;
        transition: 0.5s;
        /* 开启 3D */
        transform-style: preserve-3d;
        /* 开启上帝视角,通过旋转(ps) */
        /* transform: rotateX(-20deg) rotateY(30deg); */
      }
      a {
        display: block;
        width: 100px;
        height: 40px;
        text-decoration: none;
        color: #fff;
        text-align: center;
        line-height: 40px;
      }
      li a:first-child {
        background-color: green;
        /* 往Z轴正方向移动20px */
        transform: translateZ(20px);
      }
      li a:last-child {
        background-color: orange;
        /* 向上平移60px,往页面里面沿着X轴正方向旋转90deg */
        transform: translateY(-60px) rotateX(90deg);
      }
      li:hover {
        /* 沿着X轴负方向旋转90deg */
        transform: rotateX(-90deg);
      }
    </style>
  </head>
  <body>
    <ul>
      <li>
        <a href="#">首页</a>
        <a href="#">Index</a>
      </li>
      <li>
        <a href="#">登录</a>
        <a href="#">Login</a>
      </li>
      <li>
        <a href="#">注册</a>
        <a href="#">Register</a>
      </li>
    </ul>
  </body>
</html>

  1. 效果图

Snipaste_2022-05-28_16-05-23.png

5、空间缩放

1.目标

  • 使用scale实现空间缩放效果

2.语法

  • transform: scale(x,y)
  • transform: scale(倍数)

3.注意点

  1. scale缩放最大的优势:可以设置转换中心点缩放,默认以中心点缩放的,而且不影响其他盒子
  2. 只写一个参数时,这个参数为宽度,另一个参数高度会等比例缩放
  3. 参数是没有单位的,可以跟小数点,比 1 大元素放大,比 1 小元素缩小

6、倾斜

1.作用

  • 使用skew方法实现文字或图像的倾斜处理,在参数中分别指定水平方向上的倾斜角度与垂直方向上的倾斜角度。

2.语法 (单位 deg)

  1. transform:skew(30deg,30deg);//水平方向上倾斜30度,垂直方向上倾斜30度。
  2. transform:skew(30deg);//水平方向上进行倾斜,垂直方向上不倾斜。

3.注意点

  1. 没有特殊要求的情况下,可以只写一个属性值。

二、动画

1.目标

  • 使用animation添加动画效果

2.说明

  • 动画效果:实现多个状态间的变化过程,动画过程可控(重复播放、最终画面、是否暂停)
  • 动画的本质快速切换大量图片时在人脑中形成的具有连续性的画面
  • 构成动画的最小单元:帧或动画帧

1、动画的实现步骤

  1. 定义动画
  • 0% 和 from 是动画的开始,100% 和 to 是动画的完成。这样的规则就是动画序列
  • 请用百分比来规定变化发生的时间,或用关键词 “from” 和 “to” ,等同于 0% 和 100%。

Snipaste_2022-05-28_15-53-37.png

Snipaste_2022-05-28_15-53-51.png

  1. 使用动画
  • 动画名称和动画时长必须赋值

Snipaste_2022-05-28_15-54-29.png

2、动画属性

1.动画属性、作用、取值

Snipaste_2022-05-28_15-55-51.png

2.动画时间

Snipaste_2022-05-28_15-56-24.png

3.目标

  • 使用animation相关属性控制动画执行过程

4.注意

  1. 动画名称和动画时长必须赋值
  2. 取值不分先后顺序
  3. 如果有2个时间值,第一个时间表示动画时长,第二个时间表示延迟时间
  4. forwards不能和infinite结合使用,否则不生效
  5. 动画的名称不能为running,否则动画不生效;

3、steps实现逐帧动画

1.说明

  • 逐帧动画:帧动画。开发中,一般配合精灵图实现动画效果。
  • animation-timing-function: steps(N):将动画过程等分成N份

2.精灵动画制作步骤

  1. 准备显示区域
  • 设置盒子尺寸是一张小图的尺寸,背景图为当前精灵图
  1. 定义动画
  • 改变背景图的位置(移动的距离就是精灵图的宽度)
  1. 使用动画
  • 添加速度曲线steps(N),N与精灵图上小图个数相同
  • 添加无限重复效果

Snipaste_2022-05-28_15-37-11.png

3.有多组动画

  1. 多个动画之间动画的名称不能重复
  2. 多个动画之间要用英文逗号隔开

Snipaste_2022-05-28_15-09-39.png

4.精灵图案例

  1. 代码
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>精灵动画</title>
  <style>
    .box {
      position: absolute;
      left: 0;
      width: 140px;
      height: 140px;
      background-image: url(./images/bg.png);
      animation: 
      run 1s steps(12) infinite, 
      translate 3s linear forwards;
    }

    @keyframes run {
      100% {
        background-position: -1680px 0;
      }
    }

    @keyframes translate {
      100% {
        left: 600px;
      }
    }
  </style>
</head>
<body>
  <div class="box"></div>
</body>
</html>
  1. 效果图

Snipaste_2022-05-28_16-08-32.png