css3創建3D場景


瀏覽器本身是一個2維平面,對於3D的情況,實際上是增加了一個維度(深度),所以我們需要創建一個3D場景。這時瀏覽器不僅僅是一個平面了,更像是一個窗口,我們透過這個窗口去觀察里面的三維世界。所謂的創建3D場景,就是告訴瀏覽器,我們是在這個窗口的哪個角度對這個3維世界進行觀察,窗口里的3維物體距離這個窗口到底有多遠。

設置好3D場景后,瀏覽器中的物體雖然已經變成是3維的了,但是如果我們不進行任何設置,他們看起來還是和二維的效果是一樣的。所以我們需要使用一個新的屬性 transform 來對這些元素進行調整,以展現出他們的3維效果。事實上對於 transform 這個屬性同樣也適用於2D的場景,所以為了讓瀏覽器知道我們現在所使用的 transform 調整元素是在一個3維空間下,我們需要加上這樣一個屬性:transform-style:preserve-3d;-webkit-transform-style:preserve-3d;

 

 

一個例子:

html:

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

css:

/*基本樣式*/
*{padding:0;margin:0;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:0;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的變換屬性。

三、一個疑惑,暫未找到原因

1 a:hover span{
2     -webkit-transform:rotateX(90deg);
3     -webkit-transform:rotateX(90deg) translateY(-22px);
4     -webkit-transform:translateY(-22px) rotateX(90deg);
5 }

在 -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 的區分,別弄混了。

 


免責聲明!

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



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