利用css製作3D照片牆

利用css製作3D照片牆

<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>無標題文檔</title>
</head>

<body>
	<div>
		<img src="#"/>
		<img src="#"/>
		<img src="#"/>
		<img src="#"/>
		<img src="#"/>
		<img src="#"/>
		<img src="#"/>
		<img src="#"/>
	</div>
	
</body>
</html>


以上代碼是準備工作,在html代碼的body主體中放了一個div,裏面包着你想要顯示在照片牆上的照片,數量可以任意。接着開始着手寫樣式。

	body{perspective: 5800px;}

以上代碼是爲照片牆設置一個足夠大的3D視距,至少能容下所有圖片的運動軌跡。

	img{position:absolute;height:480px;width:320px;}
		

以上代碼是給每個圖片設置樣式,給圖片一個絕對定位,使其可以被任意地控制位置,此時圖片會重疊在一起,寬高取決於照片牆中的的圖片的具體尺寸,當然你也可以設置大小,320*480是我舉的一個例子。

	img:nth-child(1){transform: translateZ(500px);}
	img:nth-child(2){transform: translateZ(-500px);}
	img:nth-child(3){transform:rotateY(45deg) translateZ(-500px);}
	img:nth-child(4){transform:rotateY(45deg)  translateZ(500px);}
	img:nth-child(5){transform:rotateY(-45deg) translateZ(500px);}
	img:nth-child(6){transform:rotateY(-45deg) translateZ(-500px);}
	img:nth-child(7){transform:rotateY(90deg) translateZ(500px);}
	img:nth-child(8){transform:rotateY(90deg) translateZ(-500px);}

以上代碼是給每個圖片單獨設置樣式,使每張圖片繞自身Y軸旋轉一定角度,角度取決於你放了多少張圖片,有n張圖,則每張圖片依次旋轉360/n度,比如這裏我放了8張圖,那麼每張圖應依次比上一張圖片多旋轉360/8=45度,層層遞進,如0度、45度、90度、135度、180度、225度、270度、315度,再使每張圖片向自身的Z軸(此時每張圖片的Z軸方向都已改變)都設置一個正向(全爲負值也可)的等距離的位移,使其擴散開,我這裏的寫法效果也一樣,旋轉45度位移 - 500px其實和旋轉225度位移500px效果是一樣的。

俯視圖:先自身旋轉,再向各個方向擴散。
一定要先旋轉,使自身Z軸方向改變再位移,否則會發生如下情況:
在這裏插入圖片描述
先位移後再旋轉,由於先位移時所有圖片的z軸都爲初始方向,會使得所有圖片同向位移一段距離,仍然疊在一起,再旋轉時也會擠在一起。

接着

div{margin:0 auto;margin-top:600px;
transform-style: preserve-3d;
animation:zhuan 6s linear  infinite;height:480px;width:320px;}
@keyframes zhuan{
			0%{transform:rotateX(-15deg) rotateY(0);}
			100%{transform: rotateX(-15deg) rotateY(360deg);}
		}

最後一步:給包着所有圖片的div設置繞着初始位置旋轉的動畫效果即rotateY(360deg),這裏要注意是給div設置動畫,而不是給圖片,否則會變成“自轉”,我們需要的效果是“公轉”,設置margin使其在瀏覽器中間顯示,方便觀察,設置3d視角,接着給動畫設置過渡時間6s(旋轉快慢,可更改),再設置infinite使其無限循環,爲了方便觀察我使整個div繞其x軸旋轉-15度。

效果圖
在這裏插入圖片描述
END
THANK YOU FOR WATCHING

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