<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          《前端實(shí)戰(zhàn)總結(jié)》之使用CSS3實(shí)現(xiàn)酷炫的3D旋轉(zhuǎn)透視

          共 4144字,需瀏覽 9分鐘

           ·

          2022-02-22 15:27

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

          你將學(xué)到

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

          開始

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

          首先先上一張css 3D的坐標(biāo)系:

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

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

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

          <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軸位移的例子:

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

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

          當(dāng)為元素定義 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 縮放轉(zhuǎn)換值
          • scaleY(x) 給定一個 Y 軸的3D 縮放轉(zhuǎn)換值
          • scaleZ(x) 給定一個 Z 軸的3D 縮放轉(zhuǎn)換值 縮放設(shè)置和上面的類似,這里就不做過多介紹了。

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

          41af6e00dabad3325cd338a9de9619d0.webp

          2.CSS3 3D 應(yīng)用場景

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

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

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

          71b97d5ff0f3bfed93de443c0cd93869.webp

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

          59c6a061c44fa4bed40a8e82f169e10e.webp

          具體代碼如下:

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

          擴(kuò)展

          我們可以基于上面介紹的,給父元素添加動畫或者拖拽效果,這樣就可以做成更有交互性的3D方塊了,比如「置骰子游戲」「vr場景」,「3D相冊」等等,具體實(shí)現(xiàn)我會抽空依次總結(jié)出來,記得關(guān)注哦~

          V6.Dooring, 讓可視化大屏制作, 更簡單


          最后

          如果想了解更多webpack,node,gulp,css3,javascript,nodeJS,canvas等前端知識和實(shí)戰(zhàn),歡迎在公眾號《趣談前端》加入我們一起學(xué)習(xí)討論,共同探索前端的邊界。


          便內(nèi)^_^

          ?、點(diǎn)?~。

          瀏覽 48
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  国产黄色小电影 | 高潮喷水合集www | 大香蕉伊人视频网 | 日日干夜夜爽 | 天天操天天日天天射 |