浏览器本身是一个2维平面,对于3D的情况,实际上是增加了一个维度(深度),所以我们需要创建一个3D场景。这时浏览器不仅仅是一个平面了,更像是一个窗口,我们透过这个窗口去观察里面的三维世界。所谓的创建3D场景,就是告诉浏览器,我们是在这个窗口的哪个角度对这个3维世界进行观察,窗口里的3维物体距离这个窗口到底有多远。

设置好3D场景后,浏览器中的物体虽然已经变成是3维的了,但是如果我们不进行任何设置,他们看起来还是和二维的效果是一样的。所以我们需要使用一个新的属性 transform 来对这些元素进行调整,以展现出他们的3维效果。事实上对于 transform 这个属性同样也适用于2D的场景,所以为了让浏览器知道我们现在所使用的 transform 调整元素是在一个3维空间下,我们需要加上这样一个属性:transform-style:preserve-3d;-webkit-transform-style:preserve-3d;

一个例子:

html:

 <nav>
<a href="#"><span data-hover="Hello">Hello</span></a>
</nav>

css:

/*基本样式*/
*{padding:;margin:;font-family:'微软雅黑';box-sizing:border-box;}
nav{width:100%;height:200px;background:#0e83cd;padding:50px 100px;}
a{width:160px;height:45px;display:inline-block;line-height:45px;text-align:center;text-decoration:none;margin:10px 20px;font-size:24px;}
span{width:100%;display:inline-block;color:#fff;background:#2195de;padding:0 10px;position:relative;} /*3d效果样式*/
a{
-webkit-perspective:1000px;
}
a span{
-webkit-transform-origin:0 0;
-webkit-transform-style:preserve-3d;
-webkit-transition:-webkit-transform 0.3s;
}
a span::before{
content:attr(data-hover);
position:absolute;left:;top:100%;
width:100%;height:100%;background:#0965a0;
-webkit-transform-origin:0 0;
-webkit-transform-style:preserve-3d;
-webkit-transform:rotateX(-90deg);
-webkit-transition:background 0.3s;
}
a:hover span{
-webkit-transform:rotateX(90deg) translateY(-22px);
}
a:hover span::before{
background:#2195de;
}

css样式分析:(这里是只针对Chrome浏览器做的demo)

一、在需要3d效果的元素的父级创建3D场景,也就是添加下面两条属性。

-webkit-perspective:1000px;

-webkit-perspective-origin:(50% 50%);  --默认值,没有做设置。

二、具体到每个3d效果的元素,需首先设置下面两条属性,

-webkit-transform-style:preserve-3d;  --3d效果必须加上这一条,也是固定不变的一条。

-webkit-transform-origin:(0 0);  --根据需求设置前两个参数

然后具体添加transform的变换属性。

三、一个疑惑,暂未找到原因

 a:hover span{
-webkit-transform:rotateX(90deg);
-webkit-transform:rotateX(90deg) translateY(-22px);
-webkit-transform:translateY(-22px) rotateX(90deg);
}

在 -webkit-transform 中 rotateX(90deg) 和 translateY(-22px) 的调用顺序不同,得到的的效果会有差别。

注意点:

1、CSS3 perspective-origin 属性的默认值为(50% 50%),一般情况不需要设置,保持默认即可以。

2、CSS3 transform-origin 属性的默认值为(50% 50% 0),一般情况需要根据需求设置前两个参数。

transform-origin属性允许您更改转换元素的位置。2D转换元素可以改变元素的X和Y轴。 3D转换元素,还可以更改元素的Z轴。

3、注意 perspective-origin 与 transform-origin 的区分,别弄混了。

css3创建3D场景的更多相关文章

  1. Python>>>创建一个简单的3D场景

    首先安装PyOpengl pip install PyOpenGL PyOpenGL_accelerate

  2. 第一章 用three.js创建你的第一个3D场景

    第一章 用three.js创建你的第一个3D场景 到官网下载three.js的源码和示例. 创建HTML框架界面 第一个示例的代码如下: 01-basic-skeleton.html 位于 Learn ...

  3. css3实践—创建3D立方体

    css3实践-创建3D立方体 要想实现3D的效果,其实非常简单,只需指定一个元素为容器并设置transform-style:preserve-3d,那么它的后代元素便会有3D效果.不过有很多需要注意的 ...

  4. Three-js 创建第一个3D场景

    1.一个场景至少需要的三种类型组件 相机/决定哪些东西将在屏幕上渲染    光源/他们会对材质如何显示,以及生成阴影时材质如何使用产生影响    物体/他们是在相机透视图里主要的渲染队形:方块.球体等 ...

  5. 如何制作css3的3d动画——以骰子旋转为例,详解css3动画属性

    首先先来看两个用css3实现的炫酷的3d动画效果 1 2 3 4 5   6 你没看错,这个炫酷的效果都是用css3实现的. 下面是动画实现所需要用到的几个css3属性. 1.perspective: ...

  6. 使用 CSS3 实现 3D 图片滑块效果【附源码下载】

    使用 CSS3 的3D变换特性,我们可以通过让元素在三维空间中变换来实现一些新奇的效果. 这篇文章分享的这款 jQuery 立体图片滑块插件,利用了 3D transforms(变换)属性来实现多种不 ...

  7. Seen.js – 使用 SVG 或者 Canvas 渲染 3D 场景

    Seen.js 渲染3D场景为 SVG 或者 HTML5 画布.Seen.js 包含对于 SVG 和 HTML5 Canvas 元素的图形功能的最简单的抽象.所有这个库的其它组件都是不用关心将要渲染的 ...

  8. 使用three.js创建3D机房模型-分享一

    序:前段时间公司一次研讨会上,一市场部同事展现了同行业其他公司的3D机房,我司领导觉得这个可以研究研究,为了节约成本,我们在网上大量检索,最后找到一位前辈的博文[TWaver的技术博客],在那篇博文的 ...

  9. Ngui 五种点击事件实现方式及在3d场景中点透的情况

    http://www.unity蛮牛.com/thread-22018-1-1.html ngui作为unity界面插件之一中,无疑是最好用,使用最多的了从自学unity到现在界面一直使用它 由于它的 ...

随机推荐

  1. php Hash Table(一) Hash Table的结构

    关于Hash Table专题: 一直想深入理解一下php的hash table的实现,以前一直是星星点点的看看,从未彻底的总结过,那就从这个专题开始吧! 主要想总结几个部分:hashtable结构,h ...

  2. Orchard源码分析(4.3):Orchard.Events.EventsModule类(Event Bus)

    概述 采用Event Bus模式(事件总线),可以使观察者模式中的观察者和被观察者实现解耦. 在.Net 中使用观察者模式,可以使用事件(委托)和接口(类).Orchard Event  Bus使用的 ...

  3. 用eclipse导入jar包并使其在一个文件夹下

    步骤如下:1.右键点击你需要添加jar包的项目. 2.选择“Properties”. 3.然后选择对话框中的“Java Build Path”. 4.选择“Libraries”选项卡,然后点击右边的“ ...

  4. jQuery1.9.1源码分析--数据缓存Data模块

    jQuery1.9.1源码分析--数据缓存Data模块 阅读目录 jQuery API中Data的基本使用方法介绍 jQuery.acceptData(elem)源码分析 jQuery.data(el ...

  5. "当前方法的代码已经过优化,无法计算表达式的值"的这个错误的解决方案!!!

    http://blog.useasp.net/archive/2012/09/12/how-to-debug-dotnet-framework-source-when-throw-the-code-o ...

  6. Linq to sql 的语法

    Linq to SQL 语法查询(子查询 & in操作 & join ) 引用地址:http://www.cnblogs.com/82767136/articles/2949541.h ...

  7. 繁华模拟赛day8 牛栏

    /* 标称并没有用到题解中提到的那种奇妙的性质,我们可以证明,正常从1开始走的话,需要T次,如何使这个次数减小?题解中提到一个办法,有一步小于n/t,我们考虑这一步,如果把它匀到左右两步中,则可以减小 ...

  8. QS2016年全球高等教育系统实力排名 中国排名世界第八亚洲第一

    2016年5月18日,QS发布"2016年全球高等教育系统实力排名",中国在此榜单表现优异,排名世界第八亚洲第一. 排名指标 排名指标及计算方法如下: 系统实力:QS大学排名前70 ...

  9. C++ Const引用详解

    (1)       在实际的程序中,引用主要被用做函数的形式参数--通常将类对象传递给一个函数.引用必须初始化. 但是用对象的地址初始化引用是错误的,我们可以定义一个指针引用. 1 int ival ...

  10. PHP中PSR-[0-4]代码规范

    PHP-FIG 在说啥是PSR-[0-4]规范的之前,我觉得我们有必要说下它的发明者和规范者:PHP-FIG,它的网站是:www.php-fig.org.就是这个联盟组织发明和创造了PSR-[0-4] ...