一篇文章搞定css3 3d效果

css3 3d学习心得

  • 卡片反转
  • 魔方
  • banner图

    首先我们要学习好css3 3d一定要有一定的立体感

通过这个图片应该清楚的了解到了x轴 y轴 z轴是什么概念了。

首先先给大家看一个小例子:
卡片反转

这个例子只是简单的纯css3 3d 关于y轴旋转 下面是代码:

这是HTML:
<body style="background-color:#23d19d"><div id="box"><div class="bian zhi1"><img src="imags/kpxz1.jpg" alt=""></div><div class="bian zhi2"><img src="imags/kpxz2.jpg" alt=""></div></div>
</body>
这是css:
body{perspective: 800px;transform-style: preserve-3d;
}
#box{width: 300px;height: 300px;margin: 0 auto;transform-style: preserve-3d;position: relative;//相对body定位transition: 2s;//运动时间
}
#box:hover{transform:rotateY(180deg);//当鼠标移动到上面时让他旋转180°
}
#box .bian{width: 300px;height: 300px;text-align: center;line-height: 300px;font-size: 100px;position: absolute; //.mian相对与#box绝对定位
}
.zhi1{background-color: red;transform:rotateY(180deg);
}
.zhi2{background-color: yellow;backface-visibility: hidden;//设置后面的可适度为看不见
}
精彩的代码已经看完了那就聊聊原理吧!

css3 3d 顾名思义是由两个2d名片组成的 但不是让你建立连个2d啊!

  • 一个div要想又3d效果那就得在最外层建立一个3d平面.

  • transform-style: preserve-3d; 3d空间

  • perspective: 800px; 它被成为视距或者紧身.

  • 但是要是相对与body是不是也得给div上一层也得加一个紧身呢!

  • 有了3d效果是不是的有一个像眼镜一样的东西呢 在不同的地方显示的效果也是不一样的

  • perspective-origin:50% 50%; 这就是你的眼镜啦 位置不同效果也就不用了

  • 这样我们的3d空间就已经建立成了。

3d无非就是通过X Y Z轴来进行操作

rotateX/rotateY/rotateZ可以帮助理解三维坐标

translateZ则可以帮你理解透视位置。

transform-origin我们成为基点 在水平方向改变观看div的位置

scale 缩放 rotate 旋转 translate移动 skew倾斜 通过这些来进行3d效果

我相信大家已经初步了解了css3 3d了
魔方

那现在我们再来看一个例子吧!

这是一个正方体也是纯css3 来编写的

首先先让六个面全部叠加在一起 通过自己对3d空间的理解 和 x y z 轴的移动来拼接这个立方体

这是HTML:
<body style="background-color:#23d19d"><div id="box"><div class="mofang_box"id="mofang_box"><div class="mofang qian"><img src="imags/1.jpg"></div><div class="mofang hou"><img src="imags/2.jpg"></div><div class="mofang left"><img src="imags/3.jpg"></div><div class="mofang right"><img src="imags/4.jpg"></div><div class="mofang top"><img src="imags/5.jpg"></div><div class="mofang buttom"><img src="imags/6.jpg"></div></div></div><script type="text/javascript"src="js/index02.js"></script>
</body>
这是css:
img{width: 200px;height: 200px;
}
#box{perspective: 800px;transform-style: preserve-3d;transition:  5s infinite;transform:rotateX(0deg) rotateY(0deg);
}
.mofang_box{width: 200px;height: 200px;margin: 100PX auto;position: relative;transform-style: preserve-3d;transition: 50s;transform:rotateX(0deg)rotateY(0deg);
}
.mofang_box:hover{transform:rotateX(3600deg)rotateY(3600deg);
}
.mofang{width: 200px;height: 200px;text-align: center;line-height: 200px;position: absolute;}
//原来这六个面的div是叠加在一起的通过旋转 移动来让他们形成正方体
.left{transform:rotateY(90deg)translateZ(-100px);
}
.right{transform:rotateY(90deg)translateZ(100px);
}
.top{transform:rotateX(90deg)translateZ(100px)rotateZ(360deg);
}
.buttom{transform:rotateX(90deg)translateZ(-100px)rotateZ(180deg);
}
.hou{transform:rotateX(0deg)translateZ(-100px)rotateZ(180deg);
}
.qian{transform:rotateX(0deg)translateZ(100px);
}

这个例子就不多说了 下面这个是非常炫 而且经常用的banner图:

banner图

这个案例简单的说就是前面做的魔方,用5个魔方拼接起来让他在视觉上成为一体 再给每个魔方设置一个延迟时间 第一个相对第二个延迟 第二个相对第三个延迟 这样一次类推就会有这样的效果了
这是最重要的就是图片的定位 每一个div上显示的都是图片的一部分 我们需要来规定它的位置

.wutai:nth-of-type(2)>.mofang{background-position:-100px 0px;
}
.wutai:nth-of-type(3)>.mofang{background-position:-200px 0px;
}
.wutai:nth-of-type(4)>.mofang{background-position:-300px 0px;
}
.wutai:nth-of-type(5)>.mofang{background-position:-400px 0px;
}
.wutai:nth-of-type(6)>.mofang{background-position:-500px 0px;
}

他就是规定图片的位置

这是HTML:
<body style="background-color:#23d19d"><div id="box"></div>
</body>
这是css;

css里边有-webkit-都是兼容ie的写法;

img{width: 100px;height: 200px;
}
#box{-webkit-perspective: 800px;perspective: 800px;-webkit-perspective-origin: 50% 50%;perspective-origin: 30% 50%;-webkit-transform-style: preserve-3d;transform-style: preserve-3d;-webkit-transition: 5s infinite;transition:  5s;margin:100px 415px;
}
.wutai{width: 100px;height: 200px;position: relative;-webkit-transform-style: preserve-3d;transform-style: preserve-3d;float: left;margin-left: -2px;}
.mofang{width: 100px;height: 200px;text-align: center;line-height: 200px;position: absolute;
}
.left{width: 200px;height: 200px;-webkit-transform:rotateY(90deg)translateZ(-100px);transform:rotateY(90deg)translateZ(-100px);background-color: #000;
}
.right{width: 200px;height: 200px;background-color: #000;-webkit-transform:rotateY(90deg)translateZ(0px);transform:rotateY(90deg)translateZ(0px);
}
//.wutai:nth-of-type(2)>.mofang这样的很重要  他是改变图片大小的
//这个banner是把5个div拼接起来的所以要改变图片的大小和位置
.wutai:nth-of-type(2)>.mofang{background-position:-100px 0px;
}
.wutai:nth-of-type(3)>.mofang{background-position:-200px 0px;
}
.wutai:nth-of-type(4)>.mofang{background-position:-300px 0px;
}
.wutai:nth-of-type(5)>.mofang{background-position:-400px 0px;
}
.wutai:nth-of-type(6)>.mofang{background-position:-500px 0px;
}
.top{background-image:url(../imags/8.jpg);-webkit-transform:rotateX(90deg)translateZ(100px)rotateZ(360deg);transform:rotateX(90deg)translateZ(100px)rotateZ(360deg);background-size: 500px 100%;//设置图片大小为500px
}
.buttom{background-image:url(../imags/9.jpg);-webkit-transform:rotateX(90deg)rotateX(180deg)translateZ(100px);transform:rotateX(90deg)rotateX(180deg)translateZ(100px);background-size: 500px 100%;//设置图片大小为500px
}
.hou{background-image:url(../imags/10.jpg);-webkit-transform:rotateX(180deg)translateZ(100px);transform:rotateX(180deg)translateZ(100px);background-size: 500px 100%;//设置图片大小为500px
}
.qian{background-image:url(../imags/11.jpg);-webkit-transform:rotateX(0deg)translateZ(100px);transform:rotateX(0deg)translateZ(100px);background-size: 500px 100%;//设置图片大小为500px
}
这是js;
window.onload=function(){var box=document.getElementById("box");var wutai =box.getElementsByClassName("wutai");var gs=5;//遍历的divvar neirong= '<div class="wutai"><div class="mofang qian"></div><div class="mofang hou"></div><div class="mofang left"></div><div class="mofang right"></div><div class="mofang top"></div><div class="mofang buttom"></div></div>';    //遍历的HTMLvar dom="";for(var i=0;i<gs;i  ){dom =neirong;//循环遍历div的个数}box.innerHTML=dom;// 将遍历的div放入html中var dian=0;box.onclick=function(){dian  ;var jiaodu=dian*90;for(var i=0;i<gs;i  ){wutai[i].style="transition:transform 1s" 100*i "ms;transform:rotateX(" jiaodu "deg)";//设置延迟时间和旋转的度数}}setInterval(function(){dian  ;var jiaodu=dian*90;for(var i=0;i<gs;i  ){wutai[i].style="transition:transform 1s" 100*i "ms;transform:rotateX(" jiaodu "deg)";}},3000)//设置计时器让dome自己运动起来
}

最后给大家一个总结吧!

3d世界中的各种有规律的运动效果都可以使用CSS3 transform 3D方法实现我们怎么想就怎么做 3d的世界非常奇妙也非常神奇

作者:常乐

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/368323.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

5个编码技巧以减少GC开销

在本文中&#xff0c;我们将介绍五种方法&#xff0c;这些方法可以使用有效的编码来帮助垃圾回收器减少分配和释放内存的CPU时间&#xff0c;并减少GC开销。 较长的GC通常会导致我们的代码在回收内存时被停止&#xff08;也称为“停止世界”&#xff09;。 一些背景 GC的建立…

java usb 无驱打印_Windows Usb 无驱动打印

\?\USB#VID_8866&PID_0100#0001B0000000#{a5dcbf10-6530-11d2-901f-00c04fb951ed}USB小票打印解决办法一、需要驱动&#xff0c;无需更改程序安装USB打印驱动&#xff0c;然后共享打印机&#xff0c;通过 “\\计算机\打印机名”的形式&#xff0c;按端口方式写。1二、直接…

需要学习的东西列表

1.Python2.webservice3.requirejs4.idea5.webService6.redis7.doubble8.mongDB9.zookper 大数据学习曲线&#xff1a;课程一、大数据运维之Linux基础课程二、大数据开发核心技术-Hadoop 2.x从入门到精通课程三、大数据开发核心技术-大数据仓库Hive精讲课程四、大数据协作框架-S…

微信小程序 引用其他js里的方法

微信小程序中&#xff0c;在微信官方开发文档我们可以知道 小程序的目录结构 。 一个小程序页面由四个文件组成&#xff0c;一个小程序页面的四个文件具有相同路径与文件名&#xff0c;由此我们可知一个小程序页面对应着一个跟页面同名的js文件。可是当有些公共方法&#xff0…

C++内存模型

C内存模型 一文了解所有C内存的问题 AlexCool 目录 一 C内存模型 二 C对象内存模型 三 C程序运行内存空间模型 四 C栈内存空间模型 五 C堆内存空间模型 六 C内存问题及常用的解决方法 七 C程序内存性能测试 环境&#xff1a; uname -a Linux alexfeng 3.19.0-15-generic #…

css之absolute

一、absolute和float有相同的特性&#xff0c;包裹性和破坏性 1、absolute和float的相似(看下面的demo&#xff0c;如果图片在左上角&#xff0c;那么用float和absolute都一样) 1 <!doctype html>2 <html>3 <head>4 <meta charset"utf-8">5…

inline「一」:从 image 底部白边初识 line-height

本文首发于个人博客 http://www.lijundong.com/image-and-line-height/ 今天在做一个静态页面时&#xff0c;图片底部出现一条 3px 高度的白边&#xff0c;既不是 margin 也不是 padding&#xff0c;找了好久没能解决&#xff0c;后来才发现与 line-height 相关&#xff0c;问…

(转) STM32--ADC

原标题&#xff1a;STM32之ADC步骤小技巧&#xff08;英文&#xff09; 看到标题&#xff0c;别吓到哈、并不是要用英文写、至于原因是什么、请往下看&#xff1a; 言归正传&#xff1a;STM32的ADC模块的特色 1、1MHz转换速率、12位转换结果&#xff08;12位、记住这个12位哈、…

嗨,那里有回调!

因为是我的书包&#xff0c;所以我喜欢JavaScript 。 实际上&#xff0c;我已经开始喜欢JavaScritp的面向异步回调的编程风格 。 因此&#xff0c;当我发现自己处于非JavaScript环境中时&#xff08;例如Java&#xff09; &#xff0c;我往往会错过使用回调的机会。 好消息是…

GC内存可视化器教程–第一部分

正如您从以前的文章中可能已经读到的那样&#xff0c;要获得的Java程序员的一项关键技能就是理解和评估JVM的运行状况的能力&#xff0c;例如Java堆内存占用量以及垃圾回收过程。 为了实现上述目标&#xff0c;所有JVM供应商&#xff08;Oracle&#xff0c;IBM等&#xff09;都…

设置表格边框颜色

1、源码如下&#xff1a; <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html><head><title>设置表格边框颜色</title><meta http-equiv"keywords" content"keyword1,keyword2,keyword3"…

java se程序设计_JavaSE--Java 的基本程序设计结构

Java 对大小写敏感Java 中定义类名的规则很宽松。名字必须以字母开头&#xff0c;后面可以跟字母和数字的任意组合。长度基本上没有限制。但是不能使用 Java 保留字作为类名。标准的命名规范为&#xff1a;类名是以大写字母开头的名词。如果名字由多个单词组成&#xff0c;每个…

Python开发【第十九篇】:Python操作MySQL

本篇对于Python操作MySQL主要使用两种方式&#xff1a; 原生模块 pymsqlORM框架 SQLAchemypymsql pymsql是Python中操作MySQL的模块&#xff0c;其使用方法和MySQLdb几乎相同。 下载安装 1pip3 install pymysql使用操作 1、执行SQL 123456789101112131415161718192021222324252…

20180705 考试记录

T1 货物运输弱化版 题解&#xff1a; 倒着跑最短路就行没仔细看题凉凉 code: #include<cstdio> #include<iostream> #include<cstring> #include<algorithm> #define F(i,a,b) for(register int i(a);i<(b);i) using namespace std;int rd() {int x…

mysql集群跨地域同步部署_跨地域冗余 - 跨数据中心部署方案 - 《TiDB v2.1 用户文档》 - 书栈网 · BookStack...

跨数据中心部署方案作为 NewSQL 数据库&#xff0c;TiDB 兼顾了传统关系型数据库的优秀特性以及 NoSQL 数据库可扩展性&#xff0c;以及跨数据中心(下文简称“中心”)场景下的高可用。本文档旨在介绍跨数据中心部署的不同解决方案。三中心部署方案TiDB, TiKV, PD 分别分布在 3 …

使用Maven进行硒测试自动化

今天&#xff0c;我想帮助您更好地管理自动GUI测试&#xff08;Selenium&#xff09;。 在过去&#xff0c;我已经看到人们处理此问题的许多不同方式。 有些人只是使用Selenium-IDE编写这些普通HTML TestCases&#xff0c;将其存储在HDD上的某个位置&#xff0c;并在需要时手动…

js小练习题

1.2018年01月5日 11:40:30 星期三 1 <!DOCTYPE html>2 <html lang"en">3 <head>4 <meta charset"UTF-8">5 <title>Title</title>6 <script>7 8 function getCurrentDate(){9 //1. …

OC之OBJC2_UNAVAILABLE

OC之OBJC2_UNAVAILABLE】 1、What is OBJC2_UNAVAILABLE macro mean&#xff1f; 意即在OBJC2.0中&#xff0c;这些东西将被删除。 转自 https://www.cnblogs.com/tekkaman/archive/2013/04/24/3040727.html转载于:https://www.cnblogs.com/-WML-/p/9269067.html

使用prismjs为网站添加代码高亮功能

prismjs 是一款轻量、可扩展的代码语法高亮库&#xff0c;使用现代化的 Web 标准构建&#xff0c;使用 Prismjs 可以快速为网站添加代码高亮功能&#xff0c;支持超过113中编程语言&#xff0c;还支持多种插件&#xff0c;是简洁、高效的代码高亮解决方案。科技爱好者博客就是使…

Mockito – JAXB的RETURNS_DEEP_STUBS

很抱歉没有写一段时间&#xff0c;但是我正忙于为DZone编写JBoss Drools Refcard&#xff0c;而且我正在写一本有关Mockito的书&#xff0c;因此我没有太多时间来写博客了…… 无论如何&#xff0c;最近在我当前的项目中&#xff0c;我对使用Mockito和JAXB结构进行单元测试有一…