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);效果如下:
    在这里插入图片描述
    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); 如下:
    在这里插入图片描述
<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);
在这里插入图片描述在这里插入图片描述
右面:先沿着X右侧移动100px,再沿着Y轴顺时针旋转90度 transform:translateX(100px) rotateY(90deg);

在这里插入图片描述在这里插入图片描述

.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);
    在这里插入图片描述
.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>
  • 5
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值