css3制作旋轉立方體相冊


首先讓我們來看一下最終效果圖:

當鼠標放在圖片上是介個樣子滴:

是不是覺得很好看?那接下來就一起制作吧!

我個人覺得編程,首先是思路,然后是代碼,一起分析一下這個效果的思路。

1.背景顏色,它屬於一種漸變的背景色(當然這不是重點,可以根據自己的愛好進行設置);

2.我們可以觀察一下他是有兩個旋轉的立方體,大立方體套小立方體;

3.點擊圖片的時候,外部大立方體向外延伸。

有了這個大體的思路我們就可以開始敲代碼了。

1.新建文件夾

將各個不同類型的代碼進行歸類是很有必要的,新建css和img文件夾,將事先保存的圖片放在img里面,新建demo.css放在css文件夾里,新建demo.html放在外面。

2.將背景設置成漸變

*{
    padding:0;
    margin:0;
}
body{
    width:100%;
    height:100%;
    background:linear-gradient(yellow 0%,black 100%);
}

這里為了方便用*號代替,padding 和margin是為了清除默認的間距。linear-gradient就是設置漸變屬性的必要元素啦。

3.制作旋轉大立方體

html代碼:

<div id="react">
        <div class="out_frount">
            <img src="img/1.jpg" class="out_pic">
        </div>
        <div class="out_back">
            <img src="img/2.jpg" class="out_pic">
        </div>
        <div class="out_left">
            <img src="img/3.jpg" class="out_pic">
        </div>
        <div class="out_right">
            <img src="img/4.jpg" class="out_pic">
        </div>
        <div class="out_top">
            <img src="img/5.jpg" class="out_pic">
        </div>
        <div class="out_bottom">
            <img src="img/6.jpg" class="out_pic">
        </div>
    </div>

css代碼:

#react{
    width: 200px;
    height:200px;
    margin: 200px auto;
    transform-style:preserve-3d;
    animation:rotate 20s infinite;
    animation-timing-function: linear;
}
#react div{
    position:absolute;
    transition: all .4s;
}
div .out_pic{
    width:200px;
    height:200px;
    opacity:0.9;
}
@keyframes rotate{
    from{transform: rotateX(0deg) rotateY(0deg);}
    to{transform: rotateX(360deg) rotateY(360deg);}
}
.out_frount{
    transform:translateZ(100px);
}
.out_back{
    transform:translateZ(-100px);
}
.out_left{
    transform:rotateY(90deg) translateZ(100px);
}
.out_right{
    transform: rotateY(-90deg) translateZ(100px);
}
.out_top{
    transform:rotateX(90deg) translateZ(100px);
}
.out_bottom{
    transform: rotateX(-90deg) translateZ(100px);
}

思路:

(1)首先寫一個大的div用來包裹立方體的圖片,然后再用六個div包裹六個img代表正反體的各個面。

(2)通過position:absolute;屬性使六張圖片重疊。

(3)@keyframes定義rotate放方法用於旋轉圖片,在#react中使用animation引入,到此為止就可以看到圖片旋轉效果了。

(4)通過transform定位img的div是六張圖片組成正方體,這個地方如果不太明白建議畫一個平面直角坐標系,這樣更直觀哦

注:margin的寬高很關鍵,需要和正方體大小一樣,否則旋轉的時候回四處亂轉……

到此為止一個大的立方體旋轉就出來了,小的思路是一樣的,這里不再演示。

鼠標放在圖片上圖片展開:

#react:hover .out_frount{
    transform:translateZ(200px);
}
#react:hover .out_back{
    transform:translateZ(-200px);
}
#react:hover .out_left{
    transform:rotateY(90deg) translateZ(200px);
}
#react:hover .out_right{
    transform: rotateY(-90deg) translateZ(200px);
}
#react:hover .out_top{
    transform:rotateX(90deg) translateZ(200px);
}
#react:hover .out_bottom{
    transform: rotateX(-90deg) translateZ(200px);
}

思路:

直接使用hover 更改包裹圖片的div距離z軸的距離(好別扭的話……)

上完整代碼:

<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>無標題文檔</title>
<link rel="stylesheet" href="css/demo.css">
</head>

<body>
<div id="react">
    <div class="out_frount">
        <img src="img/1.jpg" class="out_pic">
    </div>
    <div class="out_back">
        <img src="img/2.jpg" class="out_pic">
    </div>
    <div class="out_left">
        <img src="img/3.jpg" class="out_pic">
    </div>
    <div class="out_right">
        <img src="img/4.jpg" class="out_pic">
    </div>
    <div class="out_top">
        <img src="img/5.jpg" class="out_pic">
    </div>
    <div class="out_bottom">
        <img src="img/6.jpg" class="out_pic">
    </div>
    <span class="in_frount">
        <img src="img/7.jpg" class="in_pic">
    </span>
    <span class="in_back">
        <img src="img/8.jpg" class="in_pic">
    </span>
    <span class="in_left">
        <img src="img/9.jpg" class="in_pic">
    </span>
    <span class="in_right">
        <img src="img/10.jpg" class="in_pic">
    </span>
    <span class="in_top">
        <img src="img/11.jpg" class="in_pic">
    </span>
    <span class="in_bottom">
        <img src="img/12.jpg" class="in_pic">
    </span>
</div>
</body>
</html>
*{
    padding:0;
    margin:0;
}
body{
    width:100%;
    height:100%;
    background:linear-gradient(yellow 0%,black 100%);
}
#react{
    width: 200px;
    height:200px;
    margin: 200px auto;
    transform-style:preserve-3d;
    animation:rotate 20s infinite;
    animation-timing-function: linear;
}
#react div{
    position:absolute;
    transition: all .4s;
}
div .out_pic{
    width:200px;
    height:200px;
    opacity:0.9;
}
div .in_pic{
    width:100px;
    height:100px;
}
#react span{
    display:block;
    position:absolute;
    width:100px;
    height:100px;
    top:50px;
    left:50px;
}
@keyframes rotate{
    from{transform: rotateX(0deg) rotateY(0deg);}
    to{transform: rotateX(360deg) rotateY(360deg);}
}
.out_frount{
    transform:translateZ(100px);
}
.out_back{
    transform:translateZ(-100px);
}
.out_left{
    transform:rotateY(90deg) translateZ(100px);
}
.out_right{
    transform: rotateY(-90deg) translateZ(100px);
}
.out_top{
    transform:rotateX(90deg) translateZ(100px);
}
.out_bottom{
    transform: rotateX(-90deg) translateZ(100px);
}
.in_frount{
    transform:translateZ(50px);
}
.in_back{
    transform:translateZ(-50px);
}
.in_left{
    transform:rotateY(90deg) translateZ(50px);
}
.in_right{
    transform: rotateY(-90deg) translateZ(50px);
}
.in_top{
    transform:rotateX(90deg) translateZ(50px);
}
.in_bottom{
    transform: rotateX(-90deg) translateZ(50px);
}
#react:hover .out_frount{
    transform:translateZ(200px);
}
#react:hover .out_back{
    transform:translateZ(-200px);
}
#react:hover .out_left{
    transform:rotateY(90deg) translateZ(200px);
}
#react:hover .out_right{
    transform: rotateY(-90deg) translateZ(200px);
}
#react:hover .out_top{
    transform:rotateX(90deg) translateZ(200px);
}
#react:hover .out_bottom{
    transform: rotateX(-90deg) translateZ(200px);
}
@charset "utf-8";
/* CSS Document */

這里用span是為了區分里面的立方體。

/***************************根據騰訊直播課程總結*************************/


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM