先欣赏一下该特效的最终效果

本文源码参考自http://www.cnblogs.com/ECJTUACM-873284962/进行一点点优化,下面是对此特效原理上的的剖析.

该特效是基于Css3的一些新特性拼接而成.主要用到了hover,transform和@keyframe属性.下面简述一下这三个属性的作用.

详情参考http://www.w3school.com.cn/css3/index.asp

hover

效果:当鼠标移到元素上时会展现你定义的hover的样式

使用方法:假定我们有一个类,名为mystyle.修改它的css样式的方式是.mystyle{}.修改它的css hover样式的方式是.mystyle:hover{}.

transform

效果:对元素进行旋转、缩放、移动或倾斜

使用方法:传入旋转rotate(angle),缩放scale(x,y),移动translate(x,y),倾斜skew(angle)的参数进行属性的修改

@keyframe

效果:实现动画效果

使用方法:@keyframe 后+动画名{from:初始状态;to:末状态}

为了方便理解,我们先看一张图片旋转的demo版

代码解析

<style>
/*实现立体效果*/
.img {
width: 50px;
height: 50px;
margin: 0 auto;
transform-style: preserve-3d;
/*设置动画播放样式:动画对象 播放速度 时间 播放次数*/
animation: rotate linear 20s infinite;
}
/*实现动画效果*/
@-webkit-keyframes rotate { /*sofari chrome*/
from {
transform: rotateX(0deg) rotateY(0deg);
}
to {
transform: rotateX(360deg) rotateY(360deg);
}
}
/*图片样式*/
.pic{
width: 200px;
height: 200px;
transform: rotateY(0deg) translateZ(100px);
}
</style>

接下来是特效实现的完整代码

<div class="wrap">
<!--部署内外层图片-->
<div class="cube">
<!--前面图片 -->
<div class="out_front">
<img src="https://i.loli.net/2018/10/04/5bb5f270969f2.jpeg" class="pic">
</div>
<!--后面图片 -->
<div class="out_back">
<img src="https://i.loli.net/2018/10/04/5bb5f23ce7f1e.jpg" class="pic">
</div>
<!--左面图片 -->
<div class="out_left">
<img src="https://i.loli.net/2018/10/04/5bb5f26e13b28.jpg" class="pic">
</div>
<!--右面图片 -->
<div class="out_right">
<img src="https://i.loli.net/2018/10/07/5bb9b1ca97948.jpg" class="pic">
</div>
<!--上面图片 -->
<div class="out_top">
<img src="https://i.loli.net/2018/10/04/5bb5f2725c5c7.jpg" class="pic">
</div>
<!--下面图片 -->
<div class="out_bottom">
<img src="https://i.loli.net/2018/10/04/5bb5f27af2e28.jpg" class="pic">
</div> <!--小正方体 -->
<span class="in_front">
<img src="https://i.loli.net/2018/10/07/5bb9b2e441d7a.jpg" class="in_pic">
</span>
<span class="in_back">
<img src="https://i.loli.net/2018/10/07/5bb9b2e712b3f.jpg" class="in_pic">
</span>
<span class="in_left">
<img src="https://i.loli.net/2018/10/07/5bb9b2e86ad25.jpg" class="in_pic">
</span>
<span class="in_right">
<img src="https://i.loli.net/2018/10/07/5bb9b2eaba148.jpg" class="in_pic">
</span>
<span class="in_top">
<img src="https://i.loli.net/2018/10/07/5bb9b2ebe5bd9.jpg" class="in_pic">
</span>
<span class="in_bottom">
<img src="https://i.loli.net/2018/10/07/5bb9b2ed867be.jpg" class="in_pic">
</span> </div>
<style>
/*最外层容器样式*/
.wrap {
width: 100px;
height: 100px;
margin: 150px;
position: relative;
} /*得到立方体效果*/
.cube {
width: 50px;
height: 50px;
margin: 0 auto;
transform-style: preserve-3d;
/*设置动画播放样式:动画对象 播放速度 时间 播放次数*/
animation: rotate linear 20s infinite;
} /*动画旋转的方式*/
/*得到动画效果*/
@-moz-keyframes rotate { /*firefox*/
from {
transform: rotateX(0deg) rotateY(0deg);
}
to {
transform: rotateX(360deg) rotateY(360deg);
}
}
@-webkit-keyframes rotate { /*sofari chrome*/
from {
transform: rotateX(0deg) rotateY(0deg);
}
to {
transform: rotateX(360deg) rotateY(360deg);
}
}
@-o-keyframes rotate { /*opera*/
from {
transform: rotateX(0deg) rotateY(0deg);
}
to {
transform: rotateX(360deg) rotateY(360deg);
}
}
/*每张图片的样式*/
.cube div {
position: absolute;
width: 200px;
height: 200px;
opacity: 0.8;
/*过渡效果*/
transition: all .4s;
} /*定义所有图片样式*/
.pic {
width: 200px;
height: 200px;
} .cube .out_front {
transform: rotateY(0deg) translateZ(100px);
} .cube .out_back {
transform: translateZ(-100px) rotateY(180deg);
} .cube .out_left {
transform: rotateY(-90deg) translateZ(100px);
} .cube .out_right {
transform: rotateY(90deg) translateZ(100px);
} .cube .out_top {
transform: rotateX(90deg) translateZ(100px);
} .cube .out_bottom {
transform: rotateX(-90deg) translateZ(100px);
} /*定义小正方体样式*/
.cube span {
display: block;
width: 100px;
height: 100px;
position: absolute;
top: 50px;
left: 50px;
} .cube .in_pic {
width: 100px;
height: 100px;
} .cube .in_front {
transform: rotateY(0deg) translateZ(50px);
} .cube .in_back {
transform: translateZ(-50px) rotateY(180deg);
} .cube .in_left {
transform: rotateY(-90deg) translateZ(50px);
} .cube .in_right {
transform: rotateY(90deg) translateZ(50px);
} .cube .in_top {
transform: rotateX(90deg) translateZ(50px);
} .cube .in_bottom {
transform: rotateX(-90deg) translateZ(50px);
} /*鼠标移入后样式*/
.cube:hover .out_front {
transform: rotateY(0deg) translateZ(200px);
} .cube:hover .out_back {
transform: translateZ(-200px) rotateY(180deg);
} .cube:hover .out_left {
transform: rotateY(-90deg) translateZ(200px);
} .cube:hover .out_right {
transform: rotateY(90deg) translateZ(200px);
} .cube:hover .out_top {
transform: rotateX(90deg) translateZ(200px);
} .cube:hover .out_bottom {
transform: rotateX(-90deg) translateZ(200px);
}
</style>
</div>

觉得文章不错,点个赞和关注吧.

HTML5特效~3D立方体旋转的更多相关文章

  1. 基于css3的3D立方体旋转特效

    今天给大家分享一款基于css3的3D立方体旋转特效.这款特效适用浏览器:360.FireFox.Chrome.Safari.Opera.傲游.搜狗.世界之窗. 不支持IE8及以下浏览器.效果图如下 : ...

  2. css3-实现3D立方体旋转

    核心内容: 1.CSS3 中 animation.perspective 属性的熟练运用. 2.CSS3 中的变形属性 transform,在 3D 立体效果中的运用. 3.3D 立方体旋转实现原理. ...

  3. 基于css3新属性transform及原生js实现鼠标拖动3d立方体旋转

    基于css3新属性transform,实现3d立方体的旋转 通过原生JS,点击事件,鼠标按下.鼠标抬起和鼠标移动事件,实现3d立方体的拖动旋转,并将旋转角度实时的反应至界面上显示 实现原理:通过获取鼠 ...

  4. js拖拽3D立方体旋转

    这段时间有点闲,所以就自己找些小玩意来练习练习.今天做了一个可以拖拽页面内空白位置3D立方体就会跟着转动的小例子,布局方面用到css3 3D转换技术,通过transform控制旋转实现的. 上个图 代 ...

  5. 用css实现3D立方体旋转特效

    先来看运行后出来的效果 它是在不停运行的一个立方体 先来看html部分的代码 <div class="rect-wrap"> <!--舞台元素,设置perspec ...

  6. HTML5 CSS3 诱人的实例: 3D立方体旋转动画

    转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/34120047 创意来自:http://www.html5tricks.com/d ...

  7. css实现3D立方体旋转特效

    先来看运行后出来的效果 它是在不停运行的一个立方体 先来看html部分的代码 <div class="rect-wrap"> <!--舞台元素,设置perspec ...

  8. 3D立方体旋转动画

    在线演示 本地下载

  9. 纯css3 3D图片立方体旋转动画特效

    纯css3 3D立方体模块,鼠标触碰,模块炸开,大立方体中套小立方体 效果展示 手机扫描二维码体验效果: 效果图如下: 源码下载:http://hovertree.com/h/bjaf/0qmul8g ...

随机推荐

  1. iOS开发中UILocalNotification本地通知实现简单的提醒功能

    这段时间项目要求做一个类似的闹钟提醒功能,对通知不太熟悉的我,决定先用到xcode自带的本地通知试试,最终成功的实现了功能,特整理分享下. 它的表现特点: app关闭的时候也能接收和显示通知. app ...

  2. Elasticsearch 因拷贝多余的jar到lib库导致无法启动的问题

    因为需要测试,无意中拷贝了一个netty-buffer-4.1.16.Final.jar包放到es的lib目录下,晚上回家启动es的时候发现启动不起来了.检查日志发现如下错误. 其中有一句关键语句 C ...

  3. java面向对象概念2

    一.理解“万事万物皆对象”. 1.在java语言范畴中,我们都将功能.结构等封装到类中,通过类的实例化,来调用具体的功能结构. 2.涉及到java语言与前端html.后端的数据库交互时,前后端的结构在 ...

  4. WeakHashMap源码分析

    WeakHashMap是一种弱引用map,内部的key会存储为弱引用, 当jvm gc的时候,如果这些key没有强引用存在的话,会被gc回收掉, 下一次当我们操作map的时候会把对应的Entry整个删 ...

  5. JAVA数据结构--AVL树的实现

    AVL树的定义 在计算机科学中,AVL树是最先发明的自平衡二叉查找树.在AVL树中任何节点的两个子树的高度最大差别为1,所以它也被称为高度平衡树.查找.插入和删除在平均和最坏情况下的时间复杂度都是.增 ...

  6. 【算法笔记】B1045 快速排序

    1045 快速排序 (25 分)   著名的快速排序算法里有一个经典的划分过程:我们通常采用某种方法取一个元素作为主元,通过交换,把比主元小的元素放到它的左边,比主元大的元素放到它的右边. 给定划分后 ...

  7. c++ 用 0x3f3f3f3f 设定最大int值的优点

    在许多算法中都要用到一个常量来表示最大值,例如:寻找一个最小数,就要先设定一个值a,如果比a小,a就等于这个数:再如,最短路径中基本的松弛操作: 0 在c++中可以用memset() 来初始化数组成最 ...

  8. linux rpm 安装包制作

    今天的任务是把make好的install作成rpm. 3GPP 的重要性, 不必多言 例1. unpackaged if [ -z "`ps -ef|grep kamailio.pid|gr ...

  9. C/C++入门易错点及常用小技巧

    int型:绝对值在10^9范围内的整数都可以定义为int型 long long 型:如果long long型赋值大于2^23-1的初值,需要在初值后面加LL,否则会编译错误. float,double ...

  10. Python爬虫常用之登录(三) 使用http请求登录

    前面说了使用浏览器登录较为简单,不需要过多分析,而使用请求登录恰恰就是以分析为主. 开发一个请求登录程序的流程: 分析请求->模拟请求->测试登录->调整参数->测试登录-&g ...