對於transform
屬性的多值的順序問題,我本身就被困擾過。後來知道了跟順序有關,可是不知道爲何。我想應該不少人跟我之前同樣,知其然不知其因此然。若是不知道的,也許這篇文章會對你們有所幫助。css
先來看一個例子。html
html
代碼:3d
<div id="red1"></div> <div id="red2"></div>
css
代碼:code
body { margin: 0; } div { width:100px; height:100px; background:red; } #red1 { transform: rotate(45deg); } #red2 { transform: rotate(45deg) translate(100px, 100px); }
紅框一transform
屬性只有一個值rotate(45deg)
,紅框二多了一個值translate(100px, 100px)
,水平和豎直都平移100px
,可是從圖中能夠看到紅框2只有豎直方向有位移。這是怎麼回事?orm
其實,當旋轉45
度後,元素的整個座標系都旋轉了45
度,以下圖:htm
圖1就是正常的座標系,圖2就是旋轉45
度後的座標系。因此紅框二就按旋轉後的座標系進行平移。由於我設置的值比較特殊,因此只有在豎直方向有位移。經過計算紅框二豎直向下平移了100√2px
,也就是紅框對角線的長度。blog
咱們再來看一個例子。it
html
代碼:io
<div id="red"></div> <div id="green"></div>
css
代碼:form
body { margin: 0; } div { width:100px; height:100px; position: absolute; top: 50px; left: 100px; } #red { background:red; transform: rotate(45deg) translate(100px, 100px); } #green { background:green; transform: translate(100px, 100px) rotate(45deg); }
圖中能夠看到,值的順序對元素位置的影響。經過上面的介紹知道,紅框先旋轉再平移,即先旋轉座標系再平移,而綠框先按正常的座標系平移,再旋轉,因此它們的位置就不一樣了。
咱們能夠觸類旁通,好比3d
旋轉等均可以按上面的方法去分析。
(完)