1. 程式人生 > >css 效果之轉換

css 效果之轉換

在css3 中,有一個轉換效果,也可以替代js,並且比 js 做得好,那就是轉換,即transform 屬性,只需要個這個屬性加上值,就可以實現轉化效果了;有三種值,平移(translate),旋轉(rotate)*和縮放(scale);

1. transform:translate

 1 <!DOCTYPE html>
 2 <html lang="en">
 3 <head>
 4     <meta charset="UTF-8">
 5     <meta name="viewport" content="width=device-width, initial-scale=1.0"
> 6 <meta http-equiv="X-UA-Compatible" content="ie=edge"> 7 <title>Document</title> 8 <style> 9 div.nei { 10 width: 200px; 11 height: 200px; 12 margin: 100px auto 0; 13 background: red; 14 } 15 div.canzhao
{ 16 margin-top: 10px; 17 text-align: center; 18 } 19 </style> 20 </head> 21 <body> 22 <div class="abox"> 23 <div class="nei"></div> 24 <div class="canzhao">這裡是中間參照</div> 25 </div> 26 </body>
27 </html>

初始狀態:

加上transform:translate(-100px,0) 之後;

 1  div.nei {
 2             width: 200px;
 3             height: 200px;
 4             margin: 100px auto 0;
 5             background: red;
 6         }
 7         div.canzhao {
 8             margin-top: 10px;
 9             text-align: center;
10         }
11         div.abox:hover .nei {
12             transform: translate(-100px, 0);
13         }

執行結果:向左移動了100px

這裡 translate(-100x,0);第一個引數代表x 軸,第二個引數代表y軸 

一般情況下,轉換配合著過渡的話,效果會更好,如下,加入過渡:

 1  div.nei {
 2             width: 200px;
 3             height: 200px;
 4             margin: 100px auto 0;
 5             background: red;
 6             /* /////加入過渡 */
 7             transition: all 2s;
 8         }
 9         div.canzhao {
10             margin-top: 10px;
11             text-align: center;
12         }
13         div.abox:hover .nei {
14             transform: translate(-100px);
15         }

 

2. transform:rotate();

 1  div.nei {
 2             width: 200px;
 3             height: 200px;
 4             margin: 100px auto 0;
 5             background: red;
 6             /* /////加入過渡 */
 7             transition: all 2s;
 8         }
 9         div.canzhao {
10             margin-top: 10px;
11             text-align: center;
12         }
13         div.abox:hover .nei {
14             /* transform: translate(-100px); */
15             transform: rotate(35deg);
16         }

執行結果:圍繞中心點進行旋轉

 

3.transform:scale();

 1  div.nei {
 2             width: 200px;
 3             height: 200px;
 4             margin: 100px auto 0;
 5             background: red;
 6             /* /////加入過渡 */
 7             transition: all 2s;
 8         }
 9         div.canzhao {
10             margin-top: 10px;
11             text-align: center;
12         }
13         div.abox:hover .nei {
14             /* transform: translate(-100px); */
15             /* transform: rotate(35deg); */
16             transform: scale(1.5, 1);
17         }

設定縮放:scale(1.5,0),第一個引數為x軸,第二個引數為y軸,執行結果:

 

如果只是需要x軸或者y 軸進行縮放的話,可以改成 transform:scaleX(1.5),或者縮放y軸 transform:scale(1.0);

如果平移,縮放,旋轉都需要同時進行的話,可以寫在一起,用空格隔開即可

 1   div.nei {
 2             width: 200px;
 3             height: 200px;
 4             margin: 100px auto 0;
 5             background: red;
 6             /* /////加入過渡 */
 7             transition: all 2s;
 8         }
 9         div.canzhao {
10             margin-top: 10px;
11             text-align: center;
12         }
13         div.abox:hover .nei {
14             /* transform: translate(-100px); */
15             /* transform: rotate(35deg); */
16             /* transform: scale(1.5, 1); */
17             transform: translate(-100px) rotate(35deg) scale(1.5, 1);
18         }

執行結果:

 

注意:當使用旋轉時,會改變元素的座標系

 

 

另外:在轉換變化中,還有一個屬性,就是transform-origin  ,通過這個屬性,可以設定轉換的參照點,yinwei預設清空下,是參照元素的中心點進行的

 1  div.nei {
 2             width: 200px;
 3             height: 200px;
 4             margin: 100px auto 0;
 5             background: red;
 6             /* /////加入過渡 */
 7             transition: all 2s;
 8 
 9         }
10 
11         div.canzhao {
12             margin-top: 10px;
13             text-align: center;
14         }
15 
16         div.abox:hover .nei {
17             /* transform: translate(-100px); */
18             transform: rotate(35deg);
19             /* ////設定參照點 參照左上角進行*/
20             transform-origin: 0px 0px;
21             /* transform: scale(1.5, 1); */
22             /* transform: translate(-100px) rotate(35deg) scale(1.5, 1); */
23         }

執行結果:

這裡 transform-origin:0px 0px;  第一個數x軸的位置,第二個是y 軸的位置,使用空格隔開兩個引數;另外接受百分比作為引數,也接受名稱定位作為引數(如 left center right top bottom);

 

預設情況下,在旋轉時,是圍繞z 軸在進行旋轉

如果想要看到圍繞x 軸或者圍繞y 軸旋轉的效果,需要在旋轉目標的上級元素上加入一個 perspective 屬性;這樣,會讓人看到近大遠小的效果

 1  div.nei {
 2             width: 200px;
 3             height: 200px;
 4             margin: 100px auto 0;
 5             background: red;
 6             /* /////加入過渡 */
 7             transition: all 2s;
 8         }
 9         div.canzhao {
10             margin-top: 10px;
11             text-align: center;
12         }
13         div.abox {
14             perspective: 300px;
15         }
16         div.abox:hover .nei {
17             /* transform: translate(-100px); */
18             transform: rotateX(35deg);
19             /* ////設定參照點 參照左上角進行*/
20             transform-origin: 0px 0px;
21             /* transform: scale(1.5, 1); */
22             /* transform: translate(-100px) rotate(35deg) scale(1.5, 1); */
23         }

執行結果:

這裡:perspective:300px;  

300px 表示距離元素300px 在觀察,距離越近,效果越明顯,距離越遠,效果越不明顯

預設情況下,perspective 屬性加在轉換元素的直接父級元素上