一篇文章搞定css3 3d效果


css3 3d學習心得

首先我們要學習好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;//遍歷的div
  var 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>';    //遍歷的HTML
  var 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的世界非常奇妙也非常神奇

作者:常樂


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM