1. 程式人生 > >用CSS畫正方體

用CSS畫正方體

我們利用transform屬性。

transform屬性向元素應用2D或3D轉換,該元素允許我們對元素進行旋轉、縮放、移動或傾斜。

rotateX(angle)定義沿著 X 軸的 3D 旋轉。

rotateY(angle)定義沿著 Y軸的 3D 旋轉。

rotateZ(angle) 定義沿著 Z 軸的 3D 旋轉。

translateZ(z)        定義 3D 轉換,只是用 Z 軸的值。

可能比較抽象,我們先來看張圖。


  • rorateX:以綠色的X軸線作為軸進行旋轉。
  • rorateY:以紅色的Y軸線作為軸進行旋轉。
  • rorateZ:相對於在XoY這個平面進行旋轉。

想象一下,把我們的手當做中間那個網格線,現在掌心朝著自己。

  •  沿著X軸就是類似這樣。沿著手腕旋轉手掌。
  •  沿著Y軸就是類似這樣。沿著中指為軸旋轉手掌。

  • 沿Z軸就是類似這樣,像刮雨器,以你的手肘為支點,旋轉手臂。

好,現在我們可以畫立方體了。

先用HTML打結構

<div class="cube">

<divclass="side front">1</div>

<divclass="side back">6</div>

<divclass="side right">4</div>

<divclass="side left">3</div>

<divclass="side top">5</div>

<divclass="side bottom">2</div>

</div>

CSS立方體樣式

.wrapper{

     width: 50%;

    float: left;

}

.cube{

     font-size: 4em;

     width: 2em;

     margin: 1.5em auto;

     transform-style:preserve-3d;//使被轉換的子元素保留其3D轉換

     transform:rotateX(-35deg) rotateY(30deg);

}                             

 .side{

     position: absolute;

    width: 2em;

     height: 2em;

    background: rgba(255,99,71,0.6);

    border: 1px solid rgba(0,0,0,0.5);

    color: white;

    text-align: center;

    line-height: 2em;

 }

增加6面的樣式

        .front{

            transform:translateZ(1em);

        }

        .bottom{

            transform:rotateX(-90deg)translateZ(1em);

        }

        .top{

            transform:rotateX(90deg)translateZ(1em);

        }

        .left{

            transform:rotateY(-90deg)translateZ(1em);

        }

        .right{

            transform:rotateY(90deg)translateZ(1em);

        }

        .back{

            transform:translateZ(-1em);

        }

<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>perspective</title>
	<style>
         .wrapper{
         	width: 50%;
         	float: left;
         }
         .cube{
         	font-size: 4em;
         	width: 2em;
         	margin: 1.5em auto;
         	transform-style:preserve-3d;
         	transform:rotateX(-35deg) rotateY(30deg);
         }
         .side{
         	position: absolute;
         	width: 2em;
         	height: 2em;
         	background: rgba(255,99,71,0.6);
         	border: 1px solid rgba(0,0,0,0.5);
         	color: white;
         	text-align: center;
         	line-height: 2em;
         }
         .front{
         	transform:translateZ(1em);
         }
         .bottom{
         	transform:rotateX(-90deg) translateZ(1em);
         }
         .top{
         	transform:rotateX(90deg) translateZ(1em);
         }
         .left{
         	transform:rotateY(-90deg) translateZ(1em);
         }
         .right{
         	transform:rotateY(90deg) translateZ(1em);
         }
         .back{
         	transform:translateZ(-1em);
         }
	</style>
</head>
<body>
	<div class="wrapper w1">
		<div class="cube">
			<div class="side front">1</div>
			<div class="side back">6</div>
			<div class="side right">4</div>
			<div class="side left">3</div>
			<div class="side top">5</div>
			<div class="side bottom">2</div>
		</div>
	</div>
	<div class="wrapper w2">
		<div class="cube">
			<div class="side front">1</div>
			<div class="side back">6</div>
			<div class="side right">4</div>
			<div class="side left">3</div>
			<div class="side top">5</div>
			<div class="side bottom">2</div>
		</div>
	</div>
</body>
</html>