欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

css3实现正方体和旋转效果

程序员文章站 2022-07-12 23:32:10
...

css3实现正方体和旋转效果

实现效果图

css3实现正方体和旋转效果css3实现正方体和旋转效果

涉及知识点

  • 3D移动
    方法:translate3d(x,y,z)
    单独设置:translateX(length),translateY(length),translateZ(length)
  • 3D旋转
    方法:rotate3d(x,y,z,angle)
  • 3D动画结果保留设置
    transform-style:preserve-3d;子元素将保留其3d位置 --立体方式,被转换的子元素保留其3d转换结果(需要设置在父元素中)

实现步骤

  • 步骤一
    页面排版基本结构,一个div作为正方体主容器,内部6个div分别为前、后、左、右、上、下六个面,按以下样式进行基本样式设置,示例按200px宽高进行演示。为了能看到立体效果,需要先在父级元素.box中设置3D动画结果保留属性transform-style:preserve-3d;和主体沿着XY轴对角旋转30度;transform:rotate3d(1,1,0,-30deg);效果如下:
    css3实现正方体和旋转效果
    css样式
<style>
        * {
            padding: 0;
            margin: 0;
            /*禁止页面文字选择*/
            -moz-user-select:none; /* Firefox私有属性 */
            -webkit-user-select:none; /* WebKit内核私有属性 */
            -ms-user-select:none; /* IE私有属性(IE10及以后) */
            -khtml-user-select:none; /* KHTML内核私有属性 */
            -o-user-select:none; /* Opera私有属性 */
            user-select:none; /* CSS3属性 */
        }
        .box{
            position:relative;
            width: 200px;
            height: 200px;
            margin:200px auto;
             /*保留子元素3D动画效果*/
            transform-style:preserve-3d;
            /*俯角预览效果预设,方便查看3D效果*/
            transform:rotate3d(1,1,0,30deg);
        }

        .box>div{
            position:absolute;
            width: 200px;
            height: 200px;
            line-height: 200px;
            text-align: center;
            /*设置透明度,方便查看*/
            opacity: 0.8;
        }
        .front {
            background-color: red;
        }

        .back {
            background-color: green;
        }

        .left {
            background-color: blue;
        }

        .right {
            background-color: cyan;
        }

        .top {
            background-color: pink;
        }

        .bottom {
            backgrond-color: purple;
        }

    </style>

元素结构

<div class="box">
    <div class="front">前面</div>
    <div class="back">后面</div>
    <div class="left">左面</div>
    <div class="right">右面</div>
    <div class="top">上面</div>
    <div class="bottom">下面</div>
</div>

  • 步骤二
    实现正面和背面的移动,正面沿着z轴向前移动100px transform:translateZ(100px);;背面向后移动100pxtransform:translateZ(-100px); 如下:
    css3实现正方体和旋转效果
<style>
	.front {
            background-color: red;
            transform:translateZ(100px);
        }

        .brack {
            background-color: green;
            transform:translateZ(-100px);
        }

</style>
  • 步骤三

左右两面移动,需要主要,应该是先实现移动再进行旋转,否则会因旋转改变坐标轴方向,影响移动结果;
左面:先沿着X左侧移动100px,再沿着Y轴逆时针旋转90度 transform:translateX(-100px) rotateY(-90deg);
css3实现正方体和旋转效果css3实现正方体和旋转效果
右面:先沿着X右侧移动100px,再沿着Y轴顺时针旋转90度 transform:translateX(100px) rotateY(90deg);

css3实现正方体和旋转效果css3实现正方体和旋转效果

.left {
  background-color: blue;
     transform:translate(-100px) rotateY(-90deg);
 }

 .right {
     background-color: cyan;
     transform:translate(100px) rotateY(90deg);
 }
  • 步骤四
    上面:先沿着Y上方移动100px,再沿着X轴顺时针旋转90度 transform:translateY(-100px) rotateX(90deg);
    下面:先沿着Y下方移动100px,再沿着X轴逆时针旋转90度 transform:translateY(100px) rotateX(-90deg);
    css3实现正方体和旋转效果
.top {
  background-color: pink;
    transform:translateY(-100px) rotateX(90deg);
}

.bottom {
    backgrond-color: purple;
    transform:translateY(100px) rotateX(-90deg);
}

  • 点击旋转动画
    css3伪类属性active中设置,动画旋转;点击时,会**动画效果。同时.box样式中设置动画执行效果按5秒执行完成transition:transform 5s;
.box:active{
   transform:rotate3d(1,1,0,360deg) rotate3d(0,1,1,360deg);
}

完整代码

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style>
        * {
            padding: 0;
            margin: 0;
            /*禁止页面文字选择*/
            -moz-user-select:none; /* Firefox私有属性 */
            -webkit-user-select:none; /* WebKit内核私有属性 */
            -ms-user-select:none; /* IE私有属性(IE10及以后) */
            -khtml-user-select:none; /* KHTML内核私有属性 */
            -o-user-select:none; /* Opera私有属性 */
            user-select:none; /* CSS3属性 */
        }
        .box{
            position:relative;
            width: 200px;
            height: 200px;
            margin:200px auto;
            /*保留子元素3D动画效果*/
            transform-style:preserve-3d;
            /*俯角预览效果预设,方便查看3D效果*/
            transform:rotate3d(1,1,0,-30deg);
            /*定义动画执行时间*/
            transition:transform 5s;
        }

        .box>div{
            position:absolute;
            width: 200px;
            height: 200px;
            line-height: 200px;
            text-align: center;
            /*设置透明度,方便查看*/
            opacity: 0.8;
        }
        .front {
            background-color: red;
            transform:translateZ(100px);
        }

        .brack {
            background-color: green;
            transform:translateZ(-100px);
        }

        .left {
            background-color: blue;
            transform:translateX(-100px) rotateY(-90deg);
        }

        .right {
            background-color: cyan;
            transform:translateX(100px) rotateY(90deg);
        }

        .top {
            background-color: pink;
            transform:translateY(-100px) rotateX(90deg);
        }

        .bottom {
            backgrond-color: purple;
            transform:translateY(100px) rotateX(-90deg);
        }
        .box:active{
            transform:rotate3d(1,1,0,360deg) rotate3d(0,1,1,360deg);
        }
    </style>
</head>
<body>
<div class="box">
    <div class="front">前面</div>
    <div class="brack">后面</div>
    <div class="left">左面</div>
    <div class="right">右面</div>
    <div class="top">上面</div>
    <div class="bottom">下面</div>
</div>
</body>
</html>
相关标签: css3 3d动画