CSS3 transform-style 3D空间,透视图perspective

Posted 胖鹅68

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了CSS3 transform-style 3D空间,透视图perspective相关的知识,希望对你有一定的参考价值。

文章目录

一、参考资料

  1. transform-style 菜鸟
  2. CSS3 perspective 属性

二、问题描述

工作中,遇到一个3D旋转的问题,如图所示

上面的城市旋转,然后会有一些立在城市上面的东西作为链接

三、解决思路

3.1 模拟3D旋转

画出一个六边形,然后绝对定位各个部门相对于六边形的坐标位置(点击坐标位置会跳转),然后利用3D旋转,将各个部门立起来,最后将整个六边形旋转,保证六边形的旋转与MP4文件的动画保持一致,最终实现动画与链接的同步。

备注:如果要显示3D效果,必须要设置transform-style:preserve-3d表示所有子元素在3D空间中呈现。

3.2 平面遮罩,添加热区

在旋转的城市上面添加一个遮罩层,每个部门的位置添加热区链接,将47秒的视频拆成47个图片,每1秒绝对定位到各个部门上,然后添加定时器,每秒切换热区的位置,用户点击部门,实际上是触发热区的跳转。

四、实现3D方案遇到的知识盲点

4.1 transform-style 元素在3D空间中呈现

transform-style: flat|preserve-3d;
描述
flat表示所有子元素在2D平面呈现。
preserve-3d表示所有子元素在3D空间中呈现
<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
  </head>
  <body>
    <div class>
      <div class="parent" onclick="whoami('parent')">parent
        <div class="child" onclick="whoami('child')">child
          <div class="grandson" onclick="whoami('grandson')">grandson</div>
        </div>
      </div>
    </div>
  </body>
</html>

<script>
  function whoami(who) 
    alert(who);
  
</script>

<style>
  .parent 
    transform-style: preserve-3d;
    height: 400px;
    width: 400px;
    border-radius: 50%;
    border: 1px solid red;
    /* background-color: red; */
    margin: 0 auto;
    margin-top: 50px;
    transform: rotateX(45deg);
    /* background-color: #eee; */
    /* 透视距离 */
    /* perspective: 250px; */
  

  .parent .child 
    height: 200px;
    width: 200px;
    border-radius: 50%;
    border: 1px solid blue;
    /* background-color: blue; */
    transform: rotateX(-45deg);
    display: inline-block;
  

  .parent .child .grandson 
    height: 100px;
    width: 100px;
    border: 1px solid green;
    border-radius: 50%;
    /* background-color: green; */
    transform: rotateY(60deg);
    display: inline-block;
  
</style>

4.2 perspective 透视视角

多少像素的3D元素是从视图的perspective属性定义。这个属性允许你改变3D元素是怎样查看透视图。

定义时的perspective属性,它是一个元素的子元素,透视图,而不是元素本身

注意:perspective 属性只影响 3D 转换元素

perspective: number|none;
描述
number元素距离视图的距离,以像素计。
none默认值。与 0 相同。不设置透视。
<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8" />
    <title>菜鸟教程(runoob.com)</title>
    <style>
      #div1 
        position: relative;
        height: 150px;
        width: 150px;
        margin: 50px;
        padding: 10px;
        border: 1px solid black;
        perspective: 150px;
        -webkit-perspective: 150px; /* Safari and Chrome */
      

      #div2 
        padding: 50px;
        position: absolute;
        border: 1px solid black;
        background-color: red;
        transform: rotateX(45deg);
        -webkit-transform: rotateX(45deg); /* Safari and Chrome */
      
    </style>
  </head>

  <body>
    <div id="div1">
      <div id="div2">HELLO</div>
    </div>
  </body>
</html>

以上是关于CSS3 transform-style 3D空间,透视图perspective的主要内容,如果未能解决你的问题,请参考以下文章

CSS3 transform-style 3D空间,透视图perspective

Day14-CSS3

玩转CSS3的3D动画效果

css3d总结

css3 3d转换

CSS3 3D位移和旋转