css3 實現自由擺動的立方體

其效果圖如下:

https://zhijs.github.io/web/cube

css3實現自由擺動的立方體

實現立方體,主要用到的css3動畫屬性有

  1. translateX(a )/ translateY(a )/translateZ(a)

  2. 分別是往x,y,z方向移動a像素的距離

  3. rotateX(deg) / rotateY(deg)/ rotateZ(deg)

    分別表示沿x,y,z軸旋轉,正值爲順時針方向,負值爲逆時針方向



  4. animation屬性

    指定動畫


  5. 如何定義動畫

    動畫通過

    @keyframes 動畫名稱 { 動畫過程 } 來定義

    實現立方體第一步

    構造立方體

    首先將六個面置於重合的位置 eg:如下圖所示
    這裏寫圖片描述
    接下來分別構造各個面,例如頂面可以看成是由正面沿x軸順時針方向旋轉90度,然後沿y軸負方向平移高度的一半,再沿z軸負方向平移高度的一半,從而得到頂面
    代碼爲

     .face2{
        background:green;
        transform:translateY(-50%) translateZ(-90px) rotateX(90deg) rotateY(0) ;
    } 

    結果如下圖所示
    這裏寫圖片描述
    同理可以構造出其他的各個面。

    將包含這些面的容器應用動畫,使其沿x,y,z軸旋轉。

    代碼如下

     index.html
     <!DOCTYPE html>
    <html>
    <head>
        <title>css3 立方體</title>
        <meta charset='utf-8'/>
        <link rel="stylesheet" type="text/css" href="style/cube.css"/>
    </head>
    <body>
        <div class="contain">
            <div class="cube">
               <figure class='face1'>1</figure>
               <figure class='face2'>2</figure>
               <figure class='face3'>3</figure>
               <figure class='face4'>4</figure>
               <figure class='face5'>5</figure>
               <figure class='face6'>6</figure>
            </div>
        </div>
    </body>
    </html>

    其主要css代碼如下

    *{
        margin:0;
        padding: 0;
    }  
    .contain{
        width: 100%;
        height: 100%;
        position: relative;
        background: #230;
    
    }  
    
    .cube{
        width:120px;
        height: 120px;
        margin-top:100px;
        position: absolute;
        top:50%;
        left: 50%;
        transform-style:preserve-3d;
        transform:translate(-50%,50%);
        animation:rote 4s infinite linear;
    }  
    
    
    .cube figure{  
        width:180px;
        height: 180px;
        position: absolute;
        text-align:center;  
        border:2px solid #ff0;
        line-height: 180px;/*行高設置成和容器一樣高,實現文字的上下居中*/
        font-size: 120px;
        font-weight: bold; /*字體加粗*/
    
    }
    
    
    .face1{
        background:red;
        transform:translateZ(0) rotateX(0) rotateY(0);
    }
    
    .face2{
        background:green;
        transform:translateY(-50%) translateZ(-90px) rotateX(90deg) rotateY(0) ;
    }  
    .face3{
        background:yellow;
        transform:translateY(0) translateZ(-90px) translateX(50%)  rotateX(0) rotateY(90deg) ; 
    }  
    .face4{
        background:blue;
        transform:translateY(50%) translateZ(-90px) translateX(0)  rotateX(90deg) rotateY(0) ; 
    }  
    .face5{
        background:gray;
        transform:translateY(0) translateZ(-90px) translateX(-50%)  rotateX(0) rotateY(90deg) ; 
    }    
    
    .face6{
        background:purple;
        transform:translateY(0) translateZ(-180px) translateX(0)  rotateX(0) rotateY(0) ; 
    }  
    
    @keyframes rote
    {
        from{
            transform:translateZ(-100px) rotateX(0) rotateY(0) rotateZ(0);
        }
        to{
            transform:translateZ(-100px) rotateX(360deg) rotateY(360deg) rotateZ(360deg);
        }
    }

    注意:translate必須放在roate前面申明,translateZ()不能傳百分比

    發表評論
    所有評論
    還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
    相關文章