《前端5分鐘》之使用CSS3實現酷炫的3D旋轉透視

2020-12-23 酷扯兒

本文轉載自【微信公眾號:趣談前端,ID:beautifulFront】經微信公眾號授權轉載,如需轉載與原文作者聯繫

你將學到

CSS3 3D 轉換的常用API介紹CSS3 3D 應用場景CSS3 3D 實現一個立方體開始

1.CSS3 3D 轉換的常用API介紹

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

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

旋轉

rotateX()rotateY()rotateZ()以上幾個api分別代表繞x,y,z軸旋轉,如下例子為繞x軸旋轉的例子:

相關代碼如下:

<style>

.d3-wrap {

position: relative;

width: 300px;

height: 300px;

margin: 120px auto;

/* 規定如何在 3D 空間中呈現被嵌套的元素 */

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>

<div></div>

</div>

位移(Transform)

translateX(x) 定義 3D 轉化,僅使用用於 X 軸的值translateY(y) 定義 3D 轉化,僅使用用於 Y 軸的值translateZ(z) 定義 3D 轉化,僅使用用於 Z 軸的值

以上幾個api分別代表相對x,y,z軸的位移,如下例子為向z軸位移的例子:

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

.d3-wrap {

transform-style: preserve-3d;

perspective: 500;

/* 設置元素被查看位置的視圖 */

-webkit-perspective: 500;

}

當為元素定義 perspective 屬性時,其子元素會獲得透視效果,而不是元素本身。

代碼如下:

.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 縮放轉換值scaleY(x) 給定一個 Y 軸的3D 縮放轉換值scaleZ(x) 給定一個 Z 軸的3D 縮放轉換值縮放設置和上面的類似,這裡就不做過多介紹了。

理論上說以上三種常見變換已經夠用了,值得關注的是我們要想讓元素呈現出3D效果,以下不可忽視的API也很重要:

2.CSS3 3D 應用場景

css 3D主要應用在網站的交互和模型效果上,比如:

3D輪播圖3D產品介紹室內3D仿真h5 3D活動頁面,比較典型的就是某年淘寶的年終總結H53D數據可視化成圖3D模型圖

其實如果css 3D用的熟悉了,一些基本的3D模型完全可以用css畫出來。

3.CSS3 3D 實現一個立方體

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

具體代碼如下:

.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結構

<div>

<div>A</div>

<div>B</div>

<div>C</div>

<div>D</div>

<div>E</div>

<div>F</div>

</div>

擴展

我們可以基於上面介紹的,給父元素添加動畫或者拖拽效果,這樣就可以做成更有交互性的3D方塊了,比如置骰子遊戲,vr場景,3D相冊等等,具體實現我會抽空依次總結出來~

相關焦點

  • 用css3實現背景即背景動畫(高級附源碼)
    本文轉載自【微信公眾號:趣談前端,ID:beautifulFront】經微信公眾號授權轉載,如需轉載與原文作者聯繫我們傳統的前端更多的是用javascript實現各種複雜動畫,自從有了Css3 transition和animation以來,前端開發在動畫這一塊有了更高的自由度和格局,對動畫的開發也越來越容易。
  • 使用CSS技術實現Netflix Logo動畫效果
    span {        transform-origin: 0 0;        transform: scaleX(80) rotateY(89.5deg);}這裡還有一些其它的方式來實現這些技巧,例如使用一個不同 perspective(比如500px),旋轉角度(比如9deg)和縮放(比如0.5),但是這些值能最大滿足我的需求。
  • 花式看《愛情公寓5》,愛奇藝極速版APP上線酷炫旋轉模式
    這是《愛情公寓5》在愛奇藝獨播取得的驚人數據,堪稱2020開年"第一神劇"。作為這個系列的"完結季",《愛情公寓5》相當"能打"。1月14日,"胡一菲"婁藝瀟、"張偉"李佳航、"美嘉"李金銘等空降愛奇藝,在愛奇藝辦公區,"美嘉"李金銘拿著手機原地旋轉,玩的不亦樂乎。原來,她正被愛奇藝極速版新上的酷炫功能吸引,大呼"好牛啊,厲害啊"。
  • 基於Vue實現一個有點意思的拼拼樂小遊戲
    回到我們的小遊戲開發,我們更多的是javascript和css3的掌握程度,在學習完這篇文章之後相信大家對javascript和css3的編程能力都會有極大的提升,後面還會介紹如何使用canvas實現生成戰績海報圖的功能。
  • 3分鐘學會在小程序開發紙飛機動畫
    姜泰——前端架構工程師14年以上開發經驗,對client和server開發都有著深刻認知,現在依然每周都在學習數學。最近京東二手拍拍團隊製作了一個小程序,叫「附近有閒」動畫動畫的實現方式有很多種,大部分人想到jq的amination,css3的amination和transition1、position vs transform
  • 《精通react/vue組件設計》之實現一個健壯的警告提示(Alert)組件
    之所以會寫組件設計相關的文章,是因為作為一名前端優秀的前端工程師,面對各種繁瑣而重複的工作,我們不應該按部就班的去"辛勤勞動",而是要根據已有前端的開發經驗,總結出一套自己的高效開發的方法.正文在開始組件設計之前希望大家對css3和js有一定的基礎,並了解基本的react/vue語法.我們先看看實現後的組件效果:1. 組件設計思路按照之前筆者總結的組件設計原則,我們第一步是要確認需求.
  • 精通react/vue組件設計之實現一個Tag(標籤)和Empty(空狀態)組件
    本文轉載自【微信公眾號:趣談前端,ID:beautifulFront】經微信公眾號授權轉載,如需轉載與原文作者聯繫前言本文是筆者寫組件設計的第五篇文章,之所以會寫組件設計相關的文章,是因為作為一名前端優秀的前端工程師,面對各種繁瑣而重複的工作,我們不應該按部就班的去
  • CSS3動畫,為你帶來極致的視覺體驗!
    所以如果想要製作比較好的動畫,建議大家還是使用CSS3與js相結合的書寫方式。2、實現動畫的前奏在開始介紹Animation之前有必要先來了解一個特殊的東西,那就是"Keyframes",我們把它叫做「關鍵幀」。下面我們就一起來看看這個「Keyframes」是什麼東西。
  • 《精通react/vue組件設計》之快速實現一個可定製的進度條組件
    本文轉載自【微信公眾號:趣談前端,ID:beautifulFront】經微信公眾號授權轉載,如需轉載與原文作者聯繫前言這篇文章是筆者寫組件設計的第四篇文章,之所以會寫組件設計相關的文章,是因為作為一名前端優秀的前端工程師,面對各種繁瑣而重複的工作,我們不應該按部就班的去"辛勤勞動",
  • PS教程:製作個性3D創意海報,就是要酷!
    本期教程,我們來學習製作酷炫的3d立體海報,效果圖如下,使用到的主要技能是凸出濾鏡,有興趣的朋友,跟著小編的開始吧。工具/材料:電腦、Photoshopcc 2019方法/步驟:1、新建文件,大小1400像素*1900像素,解析度72像素/英寸,新建三個圖層:將新建的底層圖層填充白色;新建的中間圖層,填充一個飽和度較高的顏色,本案例填充紅色;新建的頂層圖層,使用「畫筆工具」,給畫布塗抹各種飽和度較高的顏色,顏色隨自己喜好搭配。
  • SVG動畫、CSS3動畫常用知識點全解析
    repeatDur和repeatCount都可以通過設置為indefinit實現無限循環動畫。當repeatDur和repeatCount同時作用於同一個<animate>時,動畫終止時間取兩者中較小值。複雜動畫之多節點變化的動畫1.
  • iFixit發布iPhone12的X透視高清壁紙 換上後酷炫十足
    iFixit發布iPhone12的X透視高清壁紙 換上後酷炫十足   知名的拆解團隊iFixit現在送出了
  • Unity3d+Vuforia實現AR場景開發
    羊年春晚李宇春的表演就是利用AR的技術投影實現通過AR攝像機拍攝正在表演的李宇春,將虛擬出的酷炫李宇春圖像投影到舞臺上。在比如說,某售樓出有很多房型,但是都是平面圖,看起來不是很直觀,這時候就可以利用ar技術,將死板的平面圖立體顯示出來,可以直觀感受到購買的戶型。
  • 精通React/Vue系列之帶你實現一個功能強大的通知提醒框
    本文將會使用React來開發該組件,也會使用到Javascript中常用的一些設計模式,比如單例模式,但是不管你使用什麼框架來實現,原理都是通用的,如果感興趣的朋友可以用vue也實現以一下。如果對設計模式不是很了解,可以移步:15分鐘帶你了解前端工程師必知的javascript設計模式(附詳細思維導圖和源碼).
  • Unity3D研究院之3D界面與2D界面的結合
    但是有一部分UI還必須是不帶透視的,所以需要採取正交與非正交攝像機結合的方式。3D界面有兩種方式,第一種是需要進行屏幕自適應的,另一種不需要與屏幕自適應,我姑且把第一種稱假3D界面,第二種稱真3D界面。假3D界面的效果是,Image具有透視關係,旋轉後有近大遠小的效果,而且還能與屏幕進行自適應,做法很容易直接將Camera改成頭攝像機就可以。
  • Photoshop詳細解析透視變形工具的使用技巧
    透視變形是Photoshop中的工具之一,通過調整透視效果,達到調整角度、創建廣角效果、快速匹配透視效果等目的。今天PS教程就是通過4個案例分別介紹透視變形工具的4種用途。圖001.旋轉建築攝影角度透視變形工具的主要功能是改變圖案的透視效果。在案例中將會用下圖的建築物演示如何通過調整透視效果,達到旋轉照片建築角度的效果。
  • 年薪30-50萬前端網際網路工程師 WEB/HTML5 震撼登場
    網際網路行業新貴—前端開發,HTML5WEB前端技術興起,前端開發的大潮已經襲來!8年前,隨著iPhone的興起iOS開發火爆中國。當年的行動者,如今已經成為百萬富翁!今天,隨著HTML5等WEB前端技術興起,前端開發的大潮已經襲來!趕快行動!讓青春不留遺憾!
  • 精通react/vue組件設計之配合React Portals實現一個(Drawer)組件
    之所以會寫組件設計相關的文章,是因為作為一名前端優秀的前端工程師,面對各種繁瑣而重複的工作,我們不應該按部就班的去"辛勤勞動",而是要根據已有前端的開發經驗,總結出一套自己的高效開發的方法.為了讓工程師們有更多的時間去考慮業務和產品迭代,我們不得不掌握高質量組件設計的思路和方法.所以筆者將花時間去總結各種業務場景下的組件的設計思路和方法,並用原生框架的語法去實現各種常用組件的開發,希望等讓前端新手或者有一定工作經驗的朋友能有所收穫.
  • WebGL 手擼 3d 賀卡+小草飄動濾鏡
    哈哈~實現過程項目地址 現在階段就是只做了個基礎版,曲線動畫啥的都是小事兒。2019.04.27 - 現在加上了easebackout曲線方法,用的是 d3-ease感覺挺好用的,還有小花的飄動的邏輯,稍後會講解。。太餓了~吃飯去。