css3 中 transfrom 屬性用戶元素空間位置的變換。
本文結果中展現的畫面都是基於下圖進行的變換css
translate(15px, 25px) #元素沿着 X軸正方向平移 15px,沿着 Y軸正方向平移 25px
Matrix(1, 0, 0, 1, 15, 25) #效果相同
複製代碼
scale(2, 0.5) #元素在 X軸上拉伸一倍,在 Y軸上縮小一倍
Matrix(2, 0, 0, 0.5, 0, 0) #效果相同
複製代碼
rotate(30deg) #圍繞屏幕法向量順時針旋轉 30度
Matrix(0.866, 0.5, -0.5, 0.866, 0, 0) #效果相同 Sin(30) ≈ 0.866
複製代碼
transform 變換原點html
rotate(30deg);
複製代碼
rotate(30deg);
transform-origin: 'left top';
複製代碼
設置 transform-origin 爲元素坐上點後,元素圍繞左上角旋轉css3
transform: translateX(100px) rotate(90deg);
複製代碼
結果以下圖所示,能夠發現,結果中黃色方框先沿着X軸正方向移動100px,而後繞Z軸進行了90度順時針渲染。故 transform 中,各個變換是從左往右依次執行 web
transform: rotate(90deg) translateX(100px);
複製代碼
接着,咱們將 transform 中兩個變換順序調轉,結果以下圖所示。能夠發現黃色方框先繞Z軸旋轉90度,而後沿着X軸正方向移動100px。 bash
由上一章節可知,本章節中平移變換 translateX(100px) 對應的變換矩陣 translateMat 爲spa
rotate(90deg)對應的變換矩陣 rotateMat 爲3d
對 translateMat 和 rotateMat 進行矩陣乘積運算,並將運算結果導入 transform 屬性,查看結果code
CSS 代碼爲transform: matrix(0, 1, -1, 0, 0, 0)
,運行結果以下圖所示,可見設置 matrix 等於 rotateMat * translateMat 的變換效果等效於transform: rotate(90deg) translateX(100px);
orm
CSS3三維世界座標系以下圖所示,採用的是左手座標系,Y軸方向沿着屏幕向下 cdn
perspective 設置的是透視點到屏幕及(XYZ空間中Z=0平面的距離),即透視點位置爲(0, 0, 150px)
<!DOCTYPE html>
<html>
<head>
<style>
#div1
{
position: relative;
height: 150px;
width: 150px;
margin: 50px;
padding:10px;
border: 1px solid black;
-webkit-perspective:150; /* Safari and Chrome */ #設置 perspecctive 爲 150px
}
#div2
{
padding:50px;
position: absolute;
border: 1px solid black;
background-color: yellow;
-webkit-transform: rotateX(45deg); /* Safari and Chrome */
}
</style>
</head>
<body>
<div id="div1">
<div id="div2">HELLO</div>
</div>
</body>
</html>
複製代碼
結果:
將 perspective 設置爲 1500px,結果爲:
perspective 的值與元素呈現的大小無關,perspective 表示透視點到元素的距離,透視點越遠,透視效果越差<!DOCTYPE html>
<html>
<head>
<style>
#div1
{
position: relative;
height: 150px;
width: 150px;
margin: 50px;
padding:10px;
border: 1px solid black;
-webkit-perspective:150; /* Safari and Chrome */ #設置 perspecctive 爲 150px
}
#div2
{
padding:50px;
position: absolute;
border: 1px solid black;
background-color: yellow;
-webkit-transform: translateZ(-50px) rotateX(45deg); /* Safari and Chrome */
}
</style>
</head>
<body>
<div id="div1">
<div id="div2">HELLO</div>
</div>
</body>
</html>
複製代碼
在 id=div2 的元素上添加了 translateZ(-50px),即將元素沿着 Z軸負軸平移了 150px,結果爲:
CSS3 中的三維座標系採用的是左手座標系,Z軸垂直屏幕向外,故將 div2 沿着 Z軸負軸平移 50px 後,裏面的元素實際上位於了屏幕後面 50px 的位置,故看起來變小了rotateY(45deg) #圍繞 Y軸順時針旋轉 45 度
rotateX(-45deg) #圍繞 Z軸逆時針旋轉 45 度
複製代碼