(先看我博客右上角的3d盒子动画效果,目前没做兼容处理,最好最新的chrome看)无意间看到网上css3写的3d动画效果,实在炫酷,以前理解为需要js去计算去写,没想到css直接可以实现。于是开始研究,试着自己写写。刚开始看教程,实在太懵,主要涉及的3d效果的几个参数的概念太抽象。网上看很多大神写的介绍,感觉有点懂,又有点不懂,感觉还是不太理解,然后自己仿着他们的代码写,

写完后来回改css代码的参数看效果,慢慢就理解了。

先说下思路,这个很重要。

第一:组装3d盒子模型。

第二:设置盒子动画效果。

组装3d盒子模型前 先聊下基本的概念。

说到3d模型,那肯定有3个坐标系,(2d的话就只有x y 轴了)。3d盒子其实就是在2d的基础上,旋转加位移实现3d盒子上图中x轴正方向也就是你现在看这个网页屏幕的右边方向,y轴正方向也就是屏幕下边方向。z轴正方向也就是屏幕指向你的方向。角度有正反之分。假如你可以站在 上图中的某个轴的前面。右转这个轴(或者叫顺时针旋转)就是正角。反之则是负角度。

准备先写个左右前后都有面的3d盒子,先看demo效果 按照思路来,先组盒子,我们默认先定义一个3d盒子外盒,

<div>

</div>

定义好属性宽高和位置

div{
width: 400px;
height: 233px;
margin: 150px auto;
perspective: 1800px;
border:5px solid #ccc;
}

上面的border是我看div效果加的,实际不用加。perspective是什么的呢?盒子定义了这个模型,也就是启用了3d的效果,设置你在宽高页面中心点z轴正轴方向1800px距离看3d盒子,(不设置的话,没有立体效果)

然后在这个3d盒子里面设置后面旋转和位移实现动画效果的盒子ul

<div>
<ul>
</ul>
</div>

定义好属性

ul{
width: 100%;
height: 100%;
position: relative;
transform-style: preserve-3d;
}

这里我图省事直接宽高100% 也就是撑满了它的父元素div的宽高(如果比div小也可以,要美观得设置ul在div中间就得额外增加margin属性),而 position是设置了relative 是为了接下来  ul下的li元素定位用的(我把几个li元素全部绝对定位到ul上,全部重叠到一起了),transform-style则是实现3d立体旋转和唯一必须要要的,可以说是个固定设置。

然后设置4个面

<div>
<ul>
<li>1</li>
<li>2</li>
<li>3</li>
<li>4</li>
</ul>
</div>

上面说了我是默认把4个li元素绝对定位ul的

ul li{
width: 100%;
height: 100%;
line-height: 233px;
text-align: center;
font-size: 28px;
list-style: none;
position: absolute;
top: 0;
left: 0;
}

上面的都是些基础的设置。我想小伙伴应该看懂吧?上面默认4个li标签就是我们准备要的盒子的前后左右4个面。一开始是全部重叠在一起的。我们把第一个li作为后面设置属性

ul li:nth-child(1){
background-image:url(./img/1.jpg);
background-position:100% 100%;
transform:rotateY(0deg) translateZ(-200px) ;
<!-- display:none -->
}
ul li:nth-child(2){
background-image:url(./img/2.jpg);
background-position:100% 100%;
transform: rotateY(90deg) translateZ(-200px) ;
<!-- display:none -->
}
ul li:nth-child(3){
background-image:url(./img/3.jpg);
background-position:100% 100%;
transform: rotateY(180deg) translateZ(-200px) ;
<!-- display:none -->
}
ul li:nth-child(4){
background-image:url(./img/4.jpg);
background-position:100% 100%;
transform: rotateY(270deg) translateZ(-200px) scale(1,1);
}

这里我给每个面都设置了一个铺满的背景图,不用多讲。重点这里 transform

第一个li  作为后面  rotateY(0deg) 其实就是啥都没干,translateZ(-200px) 就是沿着z轴往负方向位移200px。

第二个li  rotateY(90deg) 此面中心位置沿着y轴顺时针旋转90度,translateZ(-200px) 就是沿着z轴往负方向位移200px。

第三个li  rotateY(180deg) 此面中心位置沿着y轴顺时针旋转90度,translateZ(-200px) 就是沿着z轴往负方向位移200px。

第四个li  rotateY(270deg) 此面中心位置沿着y轴顺时针旋转90度,translateZ(-200px) 就是沿着z轴往负方向位移200px。

注意这里 先旋转 和先位移都可以,但是效果不一样,

比如你看第二个,旋转90对,那么此面z轴的正方向是屏幕的右边 也就是跟X轴平行了,此时z轴负数位移,其实也就是往左边移动了200px

而第四个li面 旋转270度 就是把原来的li的正面z轴旋转到了左边。此时z轴负数位移。其实就是往右边位移了200px。

第3个li旋转180度,把第三个li轴正方向变成对面了。此时负数位移,其实就是此li朝着我们屏幕外面方向位移200px。

如果先位移的话怎么做呢?

第一个li作为后面,那就是 transform: translateZ(-200px) rotateY(-180deg) ;

第二个li作为左面,那就是 transform: translateX(-200px) rotateY(--90deg) ;

第三个li作为正面,那就是 transform: translateZ(200px) rotateY(-0deg) ;

第四个li作为右面,那就是 transform: translateX(200px) rotateY(90deg) ;

这里会有点抽象,建议大家手动改下试试。

另外,有的同学会看到还有这个属性transform-origin,这个其实就是定义你旋转的时候是以什么位置来旋转的(是中心位置旋转还是面的某一边或者其他位置,

默认就是中心位置)。还有就是大家在调试的时候,有时候前面的面会挡住侧面和后边,导致你看不到效果,可以把前面的面display none掉,或者设置

perspective-origin来调整你观看者的角度,这样可以看到一些你旋转90度导致刚好面看不到的面。

上面实现了盒子模型的组装。剩下就是对ul模型进行动画的定义了,

@keyframes move {
from{
transform: rotateY(0deg);
}
to{
transform: rotateY(-360deg);
}
}

上面就是定义模型 沿着 y轴旋转一周

然后对ul增加

animation:move 3s linear 0s infinite normal;

move 动画名称

3s   动画完成一次总共需要多久

linear 动画速度匀速

0s  动画延迟秒数(页面加载完即可运行)

infinite  动画的运动次数(无限,或者 具体次数)

normal  规定是否应该轮流反向播放动画(如果你定义动画次数大于1次,就存在第一次运行完,动画是按照第一次顺序顺序运行完还是逆序运行)

以上基本算完成了基本的3d盒子动画效果了

大家对3d盒子模型部分参数还不太理解的,有个网友做了一个很好的示例说明perspective的概念,然后自己多测试下参数或者看看我参考的2个资料地址

http://blog.csdn.net/sinat_27304985/article/details/46862145

http://www.zhangxinxu.com/wordpress/2012/09/css3-3d-transform-perspective-animate-transition/

另外我又写了2个demo ,加起来总共3个,后面有空再更新玩玩

地址1  地址2   地址3

不是1024地址啊,不要误会!!!其中第三个旋转的多边形我也是参考 上面第二篇博文来做的(三角函数都忘光了)。第三个地址是9边形,大家可以脑洞下,如果是 好几十边形。并且每个面是一张图的平均分割出来的背景图,再调整perspective是不是就可以实现类似淘宝造物节(手机微信下看)的那个炫酷的3d效果了。

初识css3 3d动画效果的更多相关文章

  1. 测试css3的动画效果在display:none的时候不耗费性能

    也许你也有这个疑惑,动画一直在播放,那它不显示出来的时候也一直在播放的话,那是否一直占用资源呢? <!doctype html> <html> <head> < ...

  2. [web前端] css3 transition属性实现3d动画效果

    cp from : https://www.cnblogs.com/chrxc/p/5123375.html transition属性是一个很强大的3d动画属性,我动手试了一下,很多在网上很火的网页动 ...

  3. css3 transition属性实现3d动画效果

    transition属性是一个很强大的3d动画属性,我动手试了一下,很多在网上很火的网页动画都可以用这个属性实现,只能说这个属性是在是太强大啦,本人在学习次属性之后才知道自己对css3的认识还是偏少, ...

  4. CSS3 3D立方体效果-transform也不过如此

    CSS3系列已经学习了一段时间了,第一篇文章写了一些css3的奇技淫巧,原文戳这里,还获得了较多网友的支持,在此谢过各位,你们的支持是我写文章最大的动力^_^. 那么这一篇文章呢,主要是通过一个3D立 ...

  5. HTML5 3D动画效果

    对以前来讲,3D动画拿到网页上展示是一件非常奢侈的事情,第一是浏览器不够先进,第二是大部分只能用flash实现伪3D.HTML5的出现,让实现网页3D动画变得非常简单,当然前提是你不要再使用像IE67 ...

  6. CSS3悬浮动画效果

    利用CSS3的伪类元素hover以及transform,transition等动画属性,可以做出一些炫酷的动画效果.下面将一些项目中使用到的示例发布出来,供大家一起学习研究.演示地址:runjs. 浏 ...

  7. [MISSAJJ原创] UITableViewCell移动及翻转出现的3D动画效果[58同城cell移动效果]

    2015-11-20 很喜欢在安静的状态, 听着音乐,敲着键盘, 和代码们浓情对话, 每一份代码的积累, 都让自己觉得很充实快乐!Y(^_^)Y. 看到58同城app的cell有动画移动出现的特效,很 ...

  8. css3 transform动画效果与公司框架简易动画的差异

    先看一下该网站的效果 http://2014guangzhouchezhan.dongfeng-citroen.com.cn/mobile/ 该站里面的动画效果由简易动画与css3动画2种方式混合达到 ...

  9. css3实现动画效果

    一.动画效果的常用属性 实现动画效果需要借助css3的下列属性:transform,transion,animation(具体可以参见教材) 二.动画效果实例 1)文字闪烁的动画效果 /*文字的闪烁效 ...

随机推荐

  1. Perl 环境安装

    Perl 环境安装 在我们开始学习 Perl 语言前,我们需要先安装 Perl 的执行环境. Perl 可以在以下平台下运行: Unix (Solaris, Linux, FreeBSD, AIX, ...

  2. mysql做主从配置

    最近想对公司的数据库做个从数据库,除了每天定时备份外,再多出一个同步数据库,双保险,这样也可以用从数据库就行比较耗资源的数据统计. 技术手段最好能记住,然后就是做笔记了,但是每次都查笔记也不好,希望能 ...

  3. (转)Android中px与dip,sp与dip等的转换工具类

    功能 通常在代码中设置组件或文字大小只能用px,通过这个工具类我们可以把dip(dp)或sp为单位的值转换为以px为单位的值而保证大小不变.方法中的参数请参考http://www.cnblogs.co ...

  4. 在.net core上,Web网站调用微信支付-统一下单接口(xml传参)一直返回错误:mch_id参数格式错误

    这是 微信支付-统一下单 接口文档 一.问题描述 在调用统一下单接口时,报mch_id参数格式错误,但商户ID确实是10位数字正确的,可就是一直报这个错误 返回的错误xml如下: 二.排错过程 1.多 ...

  5. System.Web.Mvc.RouteAttribute.cs

    ylbtech-System.Web.Mvc.RouteAttribute.cs 1.程序集 System.Web.Mvc, Version=5.2.3.0, Culture=neutral, Pub ...

  6. Delphi代码创建形式规范 1.0

                Delphi代码创建形式规范 1.0 本规范的目的:给自己的代码一个统一而标准的外观,增强 可读性,可理解性,可维护性 本规范的原则:名称反映含义,形式反映结构 1.单元风格 ...

  7. 一个因为系统字号设置导致的rem计算渲染异常问题

    测试同学突然拿着一部手机过来说,H5渲染各个元素都变大了,有些元素撑出了屏幕外面. 本来以为是某个Webview的渲染兼容问题,结果发现所有的浏览器都这样. 莫名其妙,隐约感觉是 rem计算出了问题, ...

  8. 透视jvm之垃圾回收

    JVM是JAVA世界的核心,了解它有助于我们更好调试,调优和开发程序,最近散仙在看JAVA特种兵一书,看完觉得,作者写的内容还是挺不错,大家感兴趣的,也可以购买本温故而知新下. 在JVM中,我们经常提 ...

  9. maven 运行run as maven build的时候报错

    eclipse中使用maven插件的时候,运行run as maven build的时候报错 -Dmaven.multiModuleProjectDirectory system propery is ...

  10. jmeter遇到的问题之Windows读取jtl文件出错

    问题描述 ① 使用linux运行jmeter.jmx文件后生成result.jtl文件 jmeter -n -t /tmp/jmeter.jmx -l /tmp/testresult/result.j ...