web前端入門到實戰(zhàn):用CSS3實現(xiàn)酷炫的3D旋轉(zhuǎn)透視

3D動畫效果現(xiàn)在越來越普及榨咐,已經(jīng)被廣泛的應用到了各個平臺介却,比如阿里云,華為云块茁,webpack官網(wǎng)等齿坷。它可以更接近于真實的展示我們的產(chǎn)品和介紹,帶來極強的視覺沖擊感龟劲。所以說胃夏,為了讓自己更加優(yōu)秀,css3 3D動畫必不可少昌跌。

你將學到

  • CSS3 3D 轉(zhuǎn)換的常用API介紹
  • CSS3 3D 應用場景
  • CSS3 3D 實現(xiàn)一個立方體

開始

1.CSS3 3D 轉(zhuǎn)換的常用API介紹

首先先上一張css 3D的坐標系:

接下來我們來介紹幾個常用的api:

旋轉(zhuǎn)
  • rotateX()
  • rotateY()
  • rotateZ() 以上幾個api分別代表繞x仰禀,y,z軸旋轉(zhuǎn)蚕愤,如下例子為繞x軸旋轉(zhuǎn)的例子:

相關(guān)代碼如下:

web前端開發(fā)學習Q-q-u-n: 731771211答恶,分享學習的方法和需要注意的小細節(jié),不停更新最新的教程和學習方法(詳細的前端項目實戰(zhàn)教學視頻萍诱,PDF)
<style>
.d3-wrap {
    position: relative;
    width: 300px;
    height: 300px;
    margin: 120px auto;
    /* 規(guī)定如何在 3D 空間中呈現(xiàn)被嵌套的元素 */
    transform-style: preserve-3d;
    transform: rotateX(0) rotateY(45deg);
    transform-origin: 150px 150px 150px;
}

.rotateX {
    width: 200px;
    height: 200px;
    background-color: #06c;
    transition: transform 2s;
    animation: rotateX 6s infinite;
}

@keyframes rotateX {
    0% {
        transform: rotateX(0);
    }
    100% {
        transform: rotateX(360deg);
    } 
}
</style>
<div class="d3-wrap">
    <div class="rotateX"></div>
</div>

位移(Transform)
  • translateX(x) 定義 3D 轉(zhuǎn)化悬嗓,僅使用用于 X 軸的值
  • translateY(y) 定義 3D 轉(zhuǎn)化,僅使用用于 Y 軸的值
  • translateZ(z) 定義 3D 轉(zhuǎn)化裕坊,僅使用用于 Z 軸的值 以上幾個api分別代表相對x包竹,y,z軸的位移籍凝,如下例子為向z軸位移的例子:

這里我們需要注意的是為了能看出位移的效果周瞎,我們需要在父容器上加如下屬性:

.d3-wrap {
    transform-style: preserve-3d;
    perspective: 500;
    /* 設置元素被查看位置的視圖 */
    -webkit-perspective: 500;
}

當為元素定義 perspective 屬性時,其子元素會獲得透視效果饵蒂,而不是元素本身声诸。 代碼如下:

web前端開發(fā)學習Q-q-u-n: 731771211,分享學習的方法和需要注意的小細節(jié)退盯,不停更新最新的教程和學習方法(詳細的前端項目實戰(zhàn)教學視頻彼乌,PDF)
.d3-wrap {
    position: relative;
    width: 300px;
    height: 300px;
    margin: 120px auto;
    transform-style: preserve-3d;
    perspective: 500;
    -webkit-perspective: 500;
    transform: rotateX(0) rotateY(45deg);
    transform-origin: center center;
}

.transformZ {
    width: 200px;
    height: 200px;
    background-color: #06c;
    transition: transform 2s;
    animation: transformZ 6s infinite;
}

@keyframes transformZ {
    0% {
        transform: translateZ(100px);
    }
    100% {
        transform: translateZ(0);
    } 
}

3D縮放
  • scaleX(x) 給定一個 X 軸的3D 縮放轉(zhuǎn)換值
  • scaleY(x) 給定一個 Y 軸的3D 縮放轉(zhuǎn)換值
  • scaleZ(x) 給定一個 Z 軸的3D 縮放轉(zhuǎn)換值 縮放設置和上面的類似,這里就不做過多介紹了渊迁。

理論上說以上三種常見變換已經(jīng)夠用了慰照,值得關(guān)注的是我們要想讓元素呈現(xiàn)出3D效果,以下不可忽視的API也很重要:

2.CSS3 3D 應用場景

css 3D主要應用在網(wǎng)站的交互和模型效果上琉朽,比如:

  • 3D輪播圖
  • 3D產(chǎn)品介紹
  • 室內(nèi)3D仿真
  • h5 3D活動頁面毒租,比較典型的就是某年淘寶的年終總結(jié)H5
  • 3D數(shù)據(jù)可視化成圖
  • 3D模型圖 其實如果css 3D用的熟悉了,一些基本的3D模型完全可以用css畫出來漓骚。

3.CSS3 3D 實現(xiàn)一個立方體

核心思路就是用6個面去拼接蝌衔,通過設置rotate和translate來調(diào)整相互之間的位置,如下:

具體代碼如下:

web前端開發(fā)學習Q-q-u-n: 731771211蝌蹂,分享學習的方法和需要注意的小細節(jié)噩斟,不停更新最新的教程和學習方法(詳細的前端項目實戰(zhàn)教學視頻,PDF)
.container {
    position: relative;
    width: 300px;
    height: 300px;
    margin: 120px auto;
    transform-style: preserve-3d;
    /* 為了讓其更有立體效果 */
    transform: rotateX(-30deg) rotateY(45deg);
    transform-origin: 150px 150px 150px;
    animation: rotate 6s infinite;
}
.container .page {
    position: absolute;
    width: 300px;
    height: 300px;
    text-align: center;
    line-height: 300px;
    color: #fff;
    background-size: cover;
}
.container .page:first-child {
    background-image: url(./my.jpeg);
    background-color: rgba(0,0,0,.2);
}
.container .page:nth-child(2) {
    transform: rotateX(90deg);
    transform-origin: 0 0;
    transition: transform 10s;
    background-color: rgba(179, 15, 64, 0.6);
    background-image: url(./my2.jpeg);
}

.container .page:nth-child(3) {
    transform: translateZ(300px);
    background-color: rgba(22, 160, 137, 0.7);
    background-image: url(./my3.jpeg);
}

.container .page:nth-child(4) {
    transform: rotateX(-90deg);
    transform-origin: -300px 300px;
    background-color: rgba(210, 212, 56, 0.2);
    background-image: url(./my4.jpeg);
}
.container .page:nth-child(5) {
    transform: rotateY(-90deg);
    transform-origin: 0 0;
    background-color: rgba(201, 23, 23, 0.6);
    background-image: url(./my5.jpeg);
}
.container .page:nth-child(6) {
    transform: rotateY(-90deg) translateZ(-300px);
    transform-origin: 0 300px;
    background-color: rgba(16, 149, 182, 0.2);
    background-image: url(./my6.jpeg);
}

html結(jié)構(gòu)

<div class="container">
    <div class="page">A</div>
    <div class="page">B</div>
    <div class="page">C</div>
    <div class="page">D</div>
    <div class="page">E</div>
    <div class="page">F</div>
</div>

擴展

我們可以基于上面介紹的孤个,給父元素添加動畫或者拖拽效果剃允,這樣就可以做成更有交互性的3D方塊了,比如置骰子游戲齐鲤,vr場景斥废,3D相冊等等,具體實現(xiàn)我會抽空依次總結(jié)出來

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末给郊,一起剝皮案震驚了整個濱河市牡肉,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌淆九,老刑警劉巖统锤,帶你破解...
    沈念sama閱讀 216,843評論 6 502
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異炭庙,居然都是意外死亡饲窿,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,538評論 3 392
  • 文/潘曉璐 我一進店門焕蹄,熙熙樓的掌柜王于貴愁眉苦臉地迎上來逾雄,“玉大人,你說我怎么就攤上這事腻脏⊙挥荆” “怎么了?”我有些...
    開封第一講書人閱讀 163,187評論 0 353
  • 文/不壞的土叔 我叫張陵迹卢,是天一觀的道長辽故。 經(jīng)常有香客問我,道長腐碱,這世上最難降的妖魔是什么誊垢? 我笑而不...
    開封第一講書人閱讀 58,264評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮症见,結(jié)果婚禮上喂走,老公的妹妹穿的比我還像新娘。我一直安慰自己谋作,他們只是感情好芋肠,可當我...
    茶點故事閱讀 67,289評論 6 390
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著遵蚜,像睡著了一般帖池。 火紅的嫁衣襯著肌膚如雪奈惑。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,231評論 1 299
  • 那天睡汹,我揣著相機與錄音肴甸,去河邊找鬼。 笑死囚巴,一個胖子當著我的面吹牛原在,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播彤叉,決...
    沈念sama閱讀 40,116評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼庶柿,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了秽浇?” 一聲冷哼從身側(cè)響起浮庐,我...
    開封第一講書人閱讀 38,945評論 0 275
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎兼呵,沒想到半個月后兔辅,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,367評論 1 313
  • 正文 獨居荒郊野嶺守林人離奇死亡击喂,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,581評論 2 333
  • 正文 我和宋清朗相戀三年维苔,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片懂昂。...
    茶點故事閱讀 39,754評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡介时,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出凌彬,到底是詐尸還是另有隱情沸柔,我是刑警寧澤,帶...
    沈念sama閱讀 35,458評論 5 344
  • 正文 年R本政府宣布铲敛,位于F島的核電站褐澎,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏伐蒋。R本人自食惡果不足惜工三,卻給世界環(huán)境...
    茶點故事閱讀 41,068評論 3 327
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望先鱼。 院中可真熱鬧俭正,春花似錦、人聲如沸焙畔。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,692評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至儿惫,卻和暖如春澡罚,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背肾请。 一陣腳步聲響...
    開封第一講書人閱讀 32,842評論 1 269
  • 我被黑心中介騙來泰國打工始苇, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人筐喳。 一個月前我還...
    沈念sama閱讀 47,797評論 2 369
  • 正文 我出身青樓,卻偏偏與公主長得像函喉,于是被迫代替她去往敵國和親避归。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,654評論 2 354

推薦閱讀更多精彩內(nèi)容

  • 1管呵、屬性選擇器:id選擇器 # 通過id 來選擇類名選擇器 . 通過類名來選擇屬性選擇器 ...
    Yuann閱讀 1,631評論 0 7
  • CSS參考手冊 一梳毙、初識CSS3 1.1 CSS是什么 CSS3在CSS2.1的基礎上增加了很多強大的新功能。目前...
    沒汁帥閱讀 3,579評論 1 13
  • CSS里transform變形這個屬性有點學習難度捐下,尤其在CSS3里加上了3D效果之后账锹,2維變3維學習成本更是成倍...
    張歆琳閱讀 27,803評論 5 81
  • CSS里transform變形這個屬性有點學習難度,尤其在CSS3里加上了3D效果之后坷襟,2維變3維學習成本更是成倍...
    BULL_DEBUG閱讀 872評論 0 1
  • 看了很多視頻奸柬、文章,最后卻通通忘記了婴程,別人的知識依舊是別人的廓奕,自己卻什么都沒獲得。此系列文章旨在加深自己的印象档叔,因...
    DCbryant閱讀 1,861評論 0 4