在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 属性加在转换元素的直接父级元素上

 

posted on 2018-11-11 18:49  huanying2015  阅读(188)  评论(0编辑  收藏  举报