使用css3 實現3d正反翻轉特效

首先,上傳一下最終效果:
3d翻轉圖片
接下來,我們按照結構來實現當前的demo效果:

第一步,創建一個觸發hover效果的容器,並設置3d距離:

<!--item 可以觸發翻轉的區域-->
<div class="item">
...
</div>

設置.item的perspective屬性距離,就是3d效果的z軸距離,瀏覽器默認就xy兩個軸向,css3增加了z軸,就是當前2d平面的3d距離,單位是像素。我們在這裏設置了3d距離是perspective:500px;

第二步,創建了翻轉的容器,裏面放置了顯示正面內容和背面內容的div

<!--box 可以翻轉的容器-->
    <div class="box">
        <!--font 默認顯示的正面-->
        <div class="font">正面</div>
        <!--back 背面-->
        <div class="back">背面</div>
    </div>

.box作爲翻轉的容器,我們需要通過css將其轉換爲3d翻轉樣式,並設置了變換時間爲1秒:

transition:all 1s;
transform-style: preserve-3d;

並在鼠標懸停在.item上面的時候,讓.box沿y軸翻轉180度:

        .item:hover .box{
            transform: rotateY(180deg);
        }

實現到這裏以後,我們基本就實現了可以翻轉,接下來還要實現盒子裏面正反面都有內容。

第三部,實現正反面的div,重點是設置背面不可見

<!--font 默認顯示的正面-->
<div class="font">正面</div>
<!--back 背面-->
<div class="back">背面</div>

做第二步的時候,我們也可以發現,在翻轉的div .box內創建了兩個div 正面一個背面一個,首先我們把這兩個盒子都設置絕對定位,兩個盒子都設置翻轉盒子的寬高

            position: absolute;
            top:0;
            left:0;
            width:100%;
            height:100%;
            text-align: center;
            line-height: 200px;

接下來重點來了,我們如何設置翻轉以後,讓盒子在背面不可見(默認盒子翻轉以後還是可見的),需要用到css屬性backface-visibility,我們將其設置一下:

backface-visibility: hidden;

還有最後一步,就是讓.back的div默認反向顯示,只需要讓其沿y軸旋轉180度即可:

        .back{
            transform: rotateY(180deg);
        }

這樣,就完成了一個翻轉的案例,下面放上全部代碼:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>css3d翻轉</title>
    <style>
        *{
            padding: 0;
            margin: 0;
        }

        body{
            display: flex;
            justify-content: center;
            align-items: center;
            height: 100vh;
        }

        .item{
            width:200px;
            height:200px;
            perspective:500px;
        }

        .box{
            background: #abb9c5;
            width:100%;
            height:100%;
            transition:all 1s;
            transform-style: preserve-3d;
            position: relative;
        }

        .item:hover .box{
            transform: rotateY(180deg);
        }

        .font, .back{
            position: absolute;
            top:0;
            left:0;
            width:100%;
            height:100%;
            text-align: center;
            line-height: 200px;

            backface-visibility: hidden;
        }

        .back{
            transform: rotateY(180deg);
        }

    </style>
</head>
<body>
<!--item 可以觸發翻轉的區域-->
<div class="item">
    <!--box 可以翻轉的容器-->
    <div class="box">
        <!--font 默認顯示的正面-->
        <div class="font">正面</div>
        <!--back 背面-->
        <div class="back">背面</div>
    </div>
</div>
</body>
</html>
發佈了405 篇原創文章 · 獲贊 559 · 訪問量 215萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章