CSS3中的3D动画实现(钟摆、魔方)--实现代码

CSS3中的3D动画实现(钟摆、魔方)

CSS3的2D变形----传统的transform变形效果

transform : translate、scale、rotate、skew…

translate:平移、scale:缩放、rotate:旋转、skew:倾斜

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>transform</title>
    <link rel="stylesheet" href="reset.css">
    <style>
        .box{
            margin: 20px auto;
            width: 200px;
            height: 200px;
            background: url("img/zf_cube1.png") no-repeat;
            background-size: 100% 100%;
            transform: translateX(100px) translateY(200px) rotate(45deg) scale(1.5);
            /*
                rotate(30deg):默认就是沿着垂直于屏幕方向的轴旋转的
                rotateX:沿着X轴旋转
                rotateY:沿着Y轴旋转
            */
        }
    </style>
</head>
<body>
<div class="box"></div>
</body>
</html>

CSS3的2D变形----实现钟摆效果(animation帧动画

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>clock</title>
    <link rel="stylesheet" href="reset.css">
    <style>
        .clockBox{
            position: absolute;
            top:50%;
            left:50%;
            margin:-150px 0 0 -60px;
            width: 120px;
            height: 300px;
            background: url("img/clock.png") no-repeat;
            background-size: 100% 100%;
        }
        .clockBox{
            transform-origin: center top 0;
            transform: rotate(-45deg);
            animation:clockMove 1s linear infinite both;
            /*
             * animation-name:运动轨迹的名称(@keyframes设置运动轨迹)
             * animation-duration:完成动画需要的总时间
             * animation-timing-function:运动方式,默认值ease非匀速,linear匀速,ease-in加速,ease-out减速...
             * animation-delay:延迟时间,默认时0s代表立即执行
             * animation-iteration-count:动画执行的次数,默认是1代表执行一次就结束了,infinite是无限次运动
             * animation-fill-mode:设置动画的状态
             *      none默认值:无任何特殊状态设置
             *      forwards:动画完成后会停留在最后一帧的位置,(默认动画执行完成会回退到起始位置)
             *      backwards:只有在动画有延迟时间的时候才有用,当动画在延迟时间内,让运动的元素在运动轨迹的第一帧位置等待
             *      both:同时具备以上两个效果
            */
        }
        @keyframes clockMove {
            from,to{
                transform: rotate(45deg);
            }
            50%{
                transform: rotate(-45deg);
            }
        }
    </style>
</head>
<body>
<div class="clockBox"></div>
</body>
</html>

CSS3的3D变形----实现3D变形效果的步骤和原理

perspective:定义3D元素距视图的距离

  none默认值,与设置零相同,不设置透视

  number 设置的具体指(单位px)

认知3D空间轴和3D变形效果

  translate(X|Y|Z)  rotate(X|Y|Z)......

transform-style:preserve-3d在3D空间中呈现被嵌套的元素

transform-origin:设置旋转的几点位置

  X轴:left center right length %

  Y轴:top center bottom length %

  Z轴:length

CSS3的3D变形----搭建3D魔方让其自动360度旋转

cube.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <link rel="stylesheet/less" href="css/cube.less">
    <script src="js/less.min.js"></script>

</head>
<body>
<div class="main">
    <ul class="cubeBox">
        <li><img src="img/zf_cube1.png" alt=""></li>
        <li><img src="img/zf_cube2.png" alt=""></li>
        <li><img src="img/zf_cube3.png" alt=""></li>
        <li><img src="img/zf_cube4.png" alt=""></li>
        <li><img src="img/zf_cube5.png" alt=""></li>
        <li><img src="img/zf_cube6.png" alt=""></li>
    </ul>
</div>
</body>
</html>

cube.less

@import "reset.css";

html, body {
  height: 100%;
  overflow: hidden;
}

.main {
  position: absolute;
  top: 50%;
  left: 50%;
  margin: -284px 0 0 -160px;
  width: 320px;
  height: 568px;
  background: url("../img/zf_cubeBg.jpg") no-repeat;
  background-size: cover; /*以背景图最适合的比例铺满整个屏幕:以后项目中凡是大容器或者整个页面的背景图大小最好都这样设置*/
}

.cubeBox {
  @v: 255;
  position: absolute;
  top: 50%;
  left: 50%;
  margin: -(unit(255/2,px)) 0 0 -(unit(255/2,px));
  width: 255px;
  height: 255px;

  li {
    position: absolute;
    top: 0;
    left: 0;
    width: 100%;
    height: 100%;

    img {
      display: block;
      width: 100%;
      height: 100%;
    }
  }
}

/*--实现魔方--*/
@v-1: unit(255/2, px);
@v-2: unit(-255/2, px);
.main {
  perspective: 2000px;

  .cubeBox {
    transform-style: preserve-3d;

    //=为了可以看见效果,给魔方一个初始的旋转角度
    transform: scale(0.6) rotateX(-30deg) rotateY(45deg);

    //=>自动360deg旋转
    animation:cubeMove 5s linear infinite both;

    li {
      //=>正反面
      &:nth-child(1) {
        transform: translateZ(@v-1);
      }
      &:nth-child(2) {
        transform: translateZ(@v-2) rotateY(180deg);
      }
      //=>左右面
      &:nth-child(3) {
        transform: translateX(@v-2) rotateY(-90deg);
      }
      &:nth-child(4) {
        transform: translateX(@v-1) rotateY(90deg);
      }
      //=>上下面
      &:nth-child(5) {
        transform: translateY(@v-2) rotateX(90deg);
      }
      &:nth-child(6) {
        transform: translateY(@v-1) rotateX(-90deg);
      }
    }
  }
}

@keyframes cubeMove {
  0%{
    transform: translate(50px) scale(0.6) rotateY(30deg);
  }
  25%{
    transform: translate(100px) scale(0.6) rotateY(270deg);
  }
  50%{
    transform: translate(-50px) scale(0.6) rotateY(0deg);
  }
  75%{
    transform: translate(100px) scale(0.6) rotateX(180deg);
  }
  100%{
    transform: translate(50px) scale(0.6) rotateZ(120deg);
  }
}

原文地址:https://www.cnblogs.com/CCxi/p/9454503.html

时间: 2024-08-02 21:22:01

CSS3中的3D动画实现(钟摆、魔方)--实现代码的相关文章

css3中变形与动画(三)

transform可以实现矩阵变换,transition实现属性的平滑过渡,animation意思是动画,动漫,这个属性才和真正意义的一帧一帧的动画相关.本文就介绍animation属性. animation属性通过一些关键帧中元素属性的改变来实现动画效果.当然也可以控制动画持续时间,动画迭代次数等. 一.例子 在介绍transition时开篇有一个例子就是实现鼠标放上去,div宽度从100px缓慢增大到200px. 用transition实现方法如下 div:hover{ width: 200

css3中变形与动画(一)

css3制作动画的几个属性:变形(transform),过渡(transition)和动画(animation). 首先介绍transform变形. transform英文意思:改变,变形. css3中transform注意包括以下几种:旋转(rotate),扭曲(skew),缩放(scale).移动(translate)和矩阵变形matrix. 语法: transform : none | <transform-function> [ <transform-function> ]

在CSS3中图片3D翻转效果是这样做到的

今天,带来的是纯CSS3的效果--图片3D翻转. 请看效果:http://webfront.verynet.cc/pc/rotate.html 这个效果主要还是运用了CSS3的transform变形属性,与上个效果不同的是,这次并不是动画,所以没有采用animation属性,而是采用transition过渡属性.这个属性会将元素在两种效果之间进行切换,并产生一个过渡效果.详情请看代码. HTML结构: 1 <div id="content"> 2 <div class

css3中outline切换动画效果

今天刚看了篇文章<纯CSS实现的outline切换transition动画效果> 里面的效果研究了一下,下图为实现时的效果 代码如下: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Document</title> </head> <style> .focus-tra

CSS3 弹性布局&amp;3D动画

通常我们设置perspective都是给父元素设置,给当前元素设置会导致没有3D视角的中心点,给父元素的上级元素设置会导致中心点可能错误,因为父元素的上级元素高度可能和父元素不一样.如果发现旋转时元素无法出现近距离变大,远距离变小,可以看看perspective是不是给力父元素 animation的复合写法 只需要保证第一次出现的时间是持续时间duration,第二次出现的时间是延迟时间,其他参数顺序可以顺便写name  iteration-count  timing-function anim

CSS3中的animation动画

<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <title>animation制作复杂帧动画</title> <style> body{ background-color: rgba(163, 207, 255, 0.69); } a:link{ color: #ff5ee6; } h4,dt,div{ fo

怎样使CSS3中的animation动画当每滑到一屏时每次都运行

这个得结合js来做的.比如这里有3个层,js判断滚动到当前层位置的时候给其加上一个class即可,而加的这个class就是带css3执行动画的 class <div id="a1"></div><div id="a2"></div><div id="a3"></div>//引入jQuery.js<script>var t1=$("#a1").o

如何使CSS3中的animation动画当每滑到一屏时每次都运行

这个我还没用过,但感觉以后会用到,就随手摘抄一下啦<div id="a1"></div> <div id="a2"></div> <div id="a3"></div> //引入jQuery.js <script> var t1=$("#a1").offset().top; var t1=$("#a2").offset().

css3中关于伪类的使用

目标: css中after伪类,last-child伪类的使用.以及部分css3的属性. 过程: 在制作导航时,经常会遇到在每一个li后面添加一个分割符号,到最后一个元素的时候,分割符就会去掉的一种效果. 如图 那么制作这样的一个效果,怎么用纯css很简单的完成了.这里用到了css的伪类. html部分 <body> <ul class="nav"> <li><a href="">Home</a></