一、CSS3-3D转换

1.3D

特点:近大远小,物体和面遮挡不可见

1.1三维坐标系

x 轴:水平向右 -- x 轴右边是正值,左边是负值

y 轴:垂直向下 -- y 轴下面是正值,上面是负值

z 轴:垂直屏幕 -- 往外边的是正值,往里面的是负值

2.3D移动tranlate3d

2.1 语法

  1. transform:translate3d(x,y,z);
  2. transform:translateZ(z);

2.2用法

  1. .box3 {
  2. /* 向里面移动100 */
  3. transform: translateZ(-100px);
  4. }
  5. .box4 {
  6. /* 向右移动50,向下移动50,向外移动50 */
  7. /* translate3d */
  8. transform: translate3d(50px, 50px, 50px);
  9. }
  10. .box5 {
  11. /* 向里面移动100 */
  12. /* translate3d里面的值不能省略,没有就写0 */
  13. transform: translate3d(0, 0,-100px);
  14. }

2.3总结

1.translate3d里面的3d要小写。

2.translate3d后面的值一定是三个值(x,y,z),不能省略,没有的就写0,且顺序不能颠倒。

3.3d的z值一般都是精准的像素值。

4.z值为正数就是往外面移动,为负数就是往里面移动

3.透视perspective

1.产生3d效果必须写透视。

2.透视就是视距,即人眼到屏幕的距离。

3.近大远小

4.透视prespective的单位是像素

5.透视写在被观察元素的父盒子上。

4.3D转换之移动—translatedZ

给父元素加perspective后,再给子元素添加translateZ会产生近大远小。

  1. body {
  2. /* 人眼距屏幕500px */
  3. perspective: 500px;
  4. }
  5. .box1 {
  6. /*变小*/
  7. transform: translateZ(-100px);
  8. }
  9. .box2 {
  10. /*变大*/
  11. transform: translateZ(100px);
  12. }

5.3D转换之旋转—rotate

  • transform: rotateX(45deg) -- 沿着 x 轴正方向旋转 45 度
  • transform: rotateY(45deg) -- 沿着 y 轴正方向旋转 45 度
  • transform: rotateZ(45deg) -- 沿着 z 轴正方向旋转 45 度
  • transform: rotate3d(x, y, z, 45deg) -- 沿着自定义轴旋转 45 deg 为角度

5.1 rotateX

transform: rotateX(45deg) -- 沿着 x 轴正方向旋转 45 度,即上边向后转

transform: rotateX(-45deg) -- 沿着 x 轴反方向旋转 45 度,即上边向前转

5.2 rotateY

transform: rotateY(45deg) -- 沿着 y 轴正方向旋转 45 度,即右边向后转

transform: rotateY(-45deg) -- 沿着 y 轴反方向旋转 45 度,即左边向后转

5.3 rotateZ

transform: rotateZ(45deg) -- 沿着 z 轴正方向旋转 45 度,即顺时针

transform: rotateZ(-45deg) -- 沿着 z 轴反方向旋转 45 度,即逆时针

5.4 rotate3d

transform: rotate3d(x, y, z, 45deg) -- 沿着自定义轴旋转 45 deg 为角度

transform: rotate3d(1, 1, 0, 45deg) -- 沿着左上右下对角线旋转 45度

rotate()默认就是rotatez()。

6 3D呈现—transfrom-style

控制子元素是否开启三维立体环境 ,真3d。

6.1 用法

  1. /* 给父元素加preserve-3d */
  2. /* 默认是flat,不开启三维立体环境 */
  3. /* transform-style: flat; */
  4. transform-style: preserve-3d;

6.2总结

1.代码给父亲加,影响的是子元素

2.默认是flat,不开启,preserve-3d开启

3.作用是当父元素3d变换时,子元素任然保留之前的3d状态。

6.3 与视距的区别

preserve-3d是真3D,让子元素保留了3D空间。

perspective是伪3D,傻瓜式近大远小,只是起辅助视觉观察效果的作用。

7.案例

7.1翻转盒子案例

  1. <!DOCTYPE html>
  2. <html lang="zh-CN">
  3. <head>
  4. <meta charset="UTF-8">
  5. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  6. <title>Document</title>
  7. <style>
  8. body {
  9. perspective: 400px;
  10. }
  11. .box {
  12. position: relative;
  13. width: 300px;
  14. height: 300px;
  15. margin: 100px auto;
  16. border-radius: 50%;
  17. transition: all .3s;
  18. /* 要保留子盒子的三维立体环境 */
  19. transform-style: preserve-3d;
  20. }
  21. .box:hover {
  22. transform: rotateY(180deg);
  23. }
  24. .box::before,
  25. .box::after {
  26. position: absolute;
  27. top: 0;
  28. left: 0;
  29. width: 100%;
  30. height: 100%;
  31. line-height: 300px;
  32. text-align: center;
  33. border-radius: 50%;
  34. font-size: 30px;
  35. color: #fff;
  36. }
  37. .box::before {
  38. content: "小艾同学";
  39. background-color: #09f;
  40. /* 提高层级,让他在前面 */
  41. z-index: 1;
  42. }
  43. .box::after {
  44. content: "加油鸭~";
  45. background-color: #90f;
  46. /* 先让盒子反过来,和before背靠背 */
  47. transform: rotateY(180deg);
  48. }
  49. </style>
  50. </head>
  51. <body>
  52. <div class="box"></div>
  53. </body>
  54. </html>

7.2 3D旋转导航栏

  1. <!DOCTYPE html>
  2. <html lang="zh-CN">
  3. <head>
  4. <meta charset="UTF-8">
  5. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  6. <title>Document</title>
  7. <style>
  8. * {
  9. margin: 0;
  10. padding: 0;
  11. }
  12. li {
  13. float: left;
  14. margin: 100px 5px 0;
  15. list-style: none;
  16. width: 120px;
  17. height: 35px;
  18. perspective: 500px;
  19. }
  20. .box {
  21. position: relative;
  22. width: 100%;
  23. height: 100%;
  24. transform-style: preserve-3d;
  25. transition: all .4s;
  26. }
  27. /* 鼠标经过,向上翻转90度 */
  28. .box:hover {
  29. transform: rotateX(90deg);
  30. }
  31. .box::after,
  32. .box::before {
  33. position: absolute;
  34. left: 0;
  35. top: 0;
  36. width: 100%;
  37. height: 100%;
  38. line-height: 35px;
  39. text-align: center;
  40. }
  41. .box::before {
  42. content: "小艾同学";
  43. background-color: #f34;
  44. /* 第二步,将这个盒子向外移动高度的一半 */
  45. /* 原因是立方体旋转的轴是中心点,要让这两个盒子中心点一样 */
  46. z-index: 1;
  47. transform: translateZ(17.5px);
  48. }
  49. .box::after {
  50. content: "要加油鸭~";
  51. background-color: #09f;
  52. /* 第一步:先让盒子向下移动高度的一半,再向前翻转90度 */
  53. /* 位移写前面 */
  54. transform: translateY(17.5px) rotateX(-90deg);
  55. }
  56. </style>
  57. </head>
  58. <body>
  59. <ul>
  60. <li>
  61. <div class="box"></div>
  62. </li>
  63. <li>
  64. <div class="box"></div>
  65. </li>
  66. <li>
  67. <div class="box"></div>
  68. </li>
  69. <li>
  70. <div class="box"></div>
  71. </li>
  72. <li>
  73. <div class="box"></div>
  74. </li>
  75. <li>
  76. <div class="box"></div>
  77. </li>
  78. <li>
  79. <div class="box"></div>
  80. </li>
  81. </ul>
  82. </body>
  83. </html>

7.3 旋转相册

图片上传不了,可将案例中的图片任意替换

  1. <!DOCTYPE html>
  2. <html lang="zh-CN">
  3. <head>
  4. <meta charset="UTF-8">
  5. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  6. <title>Document</title>
  7. <style>
  8. * {
  9. margin: 0;
  10. padding: 0;
  11. }
  12. body {
  13. /* 透视 */
  14. perspective: 1000px;
  15. }
  16. section {
  17. position: relative;
  18. width: 300px;
  19. height: 200px;
  20. margin: 200px auto;
  21. /* 使子元素保留三维立体空间 */
  22. transform-style: preserve-3d;
  23. /* 匀速循环播放10s */
  24. animation: rotate 10s linear infinite;
  25. }
  26. @keyframes rotate {
  27. 0% {
  28. transform: rotateY(0deg);
  29. }
  30. 100% {
  31. transform: rotateY(360deg);
  32. }
  33. }
  34. section div {
  35. position: absolute;
  36. top: 0;
  37. left: 0;
  38. width: 100%;
  39. height: 100%;
  40. background: url(images/xi.gif) no-repeat;
  41. background-size: 300px;
  42. }
  43. section div:first-child {
  44. /* 向外300 */
  45. transform: translateZ(300px);
  46. }
  47. section div:nth-child(2) {
  48. /* 先沿着y轴右内转60度,在向外移动300 */
  49. /* 此时要先写旋转再写移动 */
  50. transform: rotateY(60deg) translateZ(300px);
  51. }
  52. section div:nth-child(3) {
  53. /* 先沿着y轴右内转120度,在向外移动300 */
  54. transform: rotateY(120deg) translateZ(300px);
  55. }
  56. section div:nth-child(4) {
  57. /* 先沿着y轴右内转180度,在向外移动300 */
  58. transform: rotateY(180deg) translateZ(300px);
  59. }
  60. section div:nth-child(5) {
  61. /* 先沿着y轴右内转180度,在向外移动300 */
  62. transform: rotateY(240deg) translateZ(300px);
  63. }
  64. section div:nth-child(6) {
  65. /* 先沿着y轴右内转180度,在向外移动300 */
  66. transform: rotateY(300deg) translateZ(300px);
  67. }
  68. </style>
  69. </head>
  70. <body>
  71. <section>
  72. <div></div>
  73. <div></div>
  74. <div></div>
  75. <div></div>
  76. <div></div>
  77. <div></div>
  78. </section>
  79. </body>
  80. </html>

7.4 立方体

  1. <!DOCTYPE html>
  2. <html lang="zh-CN">
  3. <head>
  4. <meta charset="UTF-8">
  5. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  6. <title>Document</title>
  7. <style>
  8. * {
  9. margin: 0;
  10. padding: 0;
  11. }
  12. .box {
  13. position: relative;
  14. width: 200px;
  15. height: 200px;
  16. margin: 100px auto;
  17. transform-style: preserve-3d;
  18. transition: all 5s;
  19. }
  20. div[class ^=content] {
  21. position: absolute;
  22. top: 0;
  23. left: 0;
  24. width: 100%;
  25. height: 100%;
  26. text-align: center;
  27. line-height: 200px;
  28. opacity: .5;
  29. }
  30. /* 前 */
  31. .content1 {
  32. /* 向外移动一半 */
  33. transform: translateZ(100px);
  34. background-color: #90f;
  35. }
  36. /* 后 */
  37. .content2 {
  38. /* 向里移动一半 */
  39. transform: translateZ(-100px);
  40. background-color: #99a;
  41. }
  42. /* 左 */
  43. .content3 {
  44. /* 先旋转90度,再向左移动一半 */
  45. transform: rotateY(90deg) translateZ(-100px);
  46. background-color: #09f;
  47. }
  48. /* 右 */
  49. .content4 {
  50. /* 先旋转90度,再向右移动一半 */
  51. transform: rotateY(90deg) translateZ(100px);
  52. background-color: #f34;
  53. }
  54. /* 上 */
  55. .content5 {
  56. /* 先沿x轴旋转180度,在向上移动一半 */
  57. transform: rotateX(90deg) translateZ(-100px);
  58. background-color: #f99;
  59. }
  60. /* 下 */
  61. .content6 {
  62. /* 先沿x轴旋转180度,在向下移动一半 */
  63. transform: rotateX(90deg) translateZ(100px);
  64. background-color: green;
  65. }
  66. .box:hover {
  67. transform: rotate3d(1, 1, 1, 360deg);
  68. }
  69. </style>
  70. </head>
  71. <body>
  72. <div class="box">
  73. <div class="content1"></div>
  74. <div class="content2"></div>
  75. <div class="content3"></div>
  76. <div class="content4"></div>
  77. <div class="content5"></div>
  78. <div class="content6"></div>
  79. </div>
  80. </body>
  81. </html>

7.5 相册

  1. <!DOCTYPE html>
  2. <html lang="zh-CN">
  3. <head>
  4. <meta charset="UTF-8">
  5. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  6. <title>Document</title>
  7. <style>
  8. * {
  9. margin: 0;
  10. padding: 0;
  11. }
  12. body {
  13. perspective: 1000px;
  14. }
  15. ul {
  16. position: relative;
  17. width: 300px;
  18. height: 400px;
  19. margin: 200px auto;
  20. /* 旋转中线点在底部 */
  21. transform-origin: bottom;
  22. transition: transform .5s;
  23. /* 开启3d状态 */
  24. transform-style: preserve-3d;
  25. }
  26. ul:hover {
  27. transform: rotateX(30deg);
  28. }
  29. ul li {
  30. position: absolute;
  31. top: 0;
  32. left: 0;
  33. list-style: none;
  34. width: 100%;
  35. height: 100%;
  36. }
  37. ul li img {
  38. width: 100%;
  39. height: 100%;
  40. border: 5px solid #09f;
  41. border-radius: 10px;
  42. transform-origin: left;
  43. /* 匀速过渡1s */
  44. transition: transform linear 1s
  45. }
  46. ul:hover li:nth-child(5) img {
  47. /* 给每一张图片设置延迟 */
  48. transition-delay: .5s;
  49. transform: rotateY(-180deg);
  50. }
  51. ul:hover li:nth-child(4) img {
  52. transition-delay: 1s;
  53. transform: rotateY(-150deg);
  54. }
  55. ul:hover li:nth-child(3) img {
  56. transition-delay: 1.5s;
  57. transform: rotateY(-120deg);
  58. }
  59. ul:hover li:nth-child(2) img {
  60. transition-delay: 2s;
  61. transform: rotateY(-50deg);
  62. }
  63. ul li:nth-child(1) img {
  64. transform: rotateY(0deg);
  65. }
  66. </style>
  67. </head>
  68. <body>
  69. <ul>
  70. <li><img src="./images/01.jpg" alt=""></li>
  71. <li><img src="./images/02.jpg" alt=""></li>
  72. <li><img src="./images/03.jpg" alt=""></li>
  73. <li><img src="./images/04.jpg" alt=""></li>
  74. <li><img src="./images/05.jpg" alt=""></li>
  75. </ul>
  76. </body>
  77. </html>

分享结束!有不足之处敬请批评指正!

03-css3中的3D转换的更多相关文章

  1. CSS3中2D/3D转换、过渡、动画

    转换.过渡.动画 2D 转换 1.translate() 方法 通过 translate() 方法,元素从其当前位置移动,根据给定的 left(x 坐标) 和 top(y 坐标) 位置参数: 实例 d ...

  2. CSS3中的3D动画实现(钟摆、魔方)--实现代码

    CSS3中的3D动画实现(钟摆.魔方) transition-property 过渡动画属性  all|[attr] transition-duration 过渡时间 transition-delay ...

  3. CSS3 2D、3D转换

    2D转换方法:transform().rotate().scale().skew().matrix() 3D转换方法:rotateX().rotateY() 1.示例代码 <!DOCTYPE h ...

  4. CSS3中的2D转换

    通过 CSS3 转换,我们能够对元素进行移动.缩放.转动.拉长或拉伸. 转换是使元素改变形状.尺寸和位置的一种效果. 注:Internet Explorer 10.Firefox 以及 Opera 支 ...

  5. css3中做3D导航栏

    看别人做的一个3D导航栏,觉得很厉害,这里先保存下来,后面有时间好好分析一下: <!doctype html> <html lang="en"> <h ...

  6. css3 中的2D转换

    一.CSS3转换 通过转换实现对对元素进行旋转.缩放.移动.拉伸的效果:这种原来必须要通过JS或者图片处理才可以实现的效果,现在都可以通过CSS3来完成. 2D转换采用transform属性来实现效果 ...

  7. 前端笔记之HTML5&CSS3(下)2D/3D转换&animate动画

    一.2D转换(transform) CSS3中的transform转换和PS中的变换是一样的,分别有:缩放.位移.斜切.旋转 1.1 transform:scale()缩放 transform:sca ...

  8. CSS3 3D转换——rotateX(),rotateY(),rotateZ()

    CSS3 允许使用 3D 转换来对元素进行格式化. ㈠浏览器支持 Internet Explorer 10 和 Firefox 支持 3D 转换. Chrome 和 Safari 需要前缀 -webk ...

  9. CSS3带你实现3D转换效果

    前言 在css3中允许使用3D转换来对元素进行格式化,在原本只是2D转化的平面中引入了Z轴.在这之前我们讲解了css3中的2D转换,也就是二维空间变换,本篇的3D转换就是基于原来的2D转换而来,与2D ...

随机推荐

  1. Spring框架——继承 - 依赖 - 命名空间

    Spring 继承 子 bean 可以继承⽗ bean 的属性值. <bean id="user" class="com.sunjian.entity.User&q ...

  2. shell编程之循环语句

    for #! /bin/sh for FRUIT in apple banana pear; do echo "I like $FRUIT" done while #! /bin/ ...

  3. hackerone或PayPal转账到国内银行卡

    1.首先hackerone会提示有W9那么一说,这个是美国人纳税的,我们是中国人不需要纳税的,只要给美国税务局发邮件说你是中国人不需要纳税就OK了.具体操作百度. 2.如此就会成功转账到你的PayPa ...

  4. 动态规划-LCS-Uncrossed Lines

    2020-02-11 21:14:18 问题描述: 问题求解: 本质就是LCS. public int maxUncrossedLines(int[] A, int[] B) { int len1 = ...

  5. RDD的Cache、Persist、Checkpoint的区别和StorageLevel存储级别划分

    为了增强容错性和高可用,避免上游RDD被重复计算的大量时间开销,Spark RDD设计了包含多种存储级别的缓存和持久化机制,主要有三个概念:Cache.Persist.Checkout. 1.存储级别 ...

  6. 你所不知道的 C# 中的细节

    前言 有一个东西叫做鸭子类型,所谓鸭子类型就是,只要一个东西表现得像鸭子那么就能推出这玩意就是鸭子. C# 里面其实也暗藏了很多类似鸭子类型的东西,但是很多开发者并不知道,因此也就没法好好利用这些东西 ...

  7. Mysql获取系统时间,年,月,日

      Mysql数据库中获取系统时间,年,月,日单个获取 获取当前系统日期时间:select SYSDATE() AS 系统日期时间; 获取当前系统年月日:select current_date AS ...

  8. java 环境变量配置与第一个程序运行

    从开始下载jdk,到运行出java第一个程序 ,花了5天时间 ,不过我相信万事开头难 ,以后会越来越好的 ,加油! jdk的下载: 在oracle官网上即可下载,jdk安装包,下载完以后运行安装 ,路 ...

  9. Python python 五种数据类型--字符串

    # python 字符串的初始化 var1 = 'hello,world' # python 字符串为不可变类型 var2= var1* 2 print(var1) #hello,world prin ...

  10. Spring装配Bean的三种方式+导入和混合配置

    目录 Spring IoC与bean 基于XML的显式装配 xml配置的基本结构 bean实例的三种创建方式 依赖注入的两种方式 构造器注入方式 setter方法注入方式 利用命名空间简化xml 基于 ...