CSS3变形

  CSS 2D transform获得了各主流浏览器的支持,而CSS3D transform的情况则不尽人意。

  transform属性可以旋转、缩放、倾斜和移动元素。

1、2D旋转

  rotate(<angle>):该参数接受一个角度参数值,用来指定旋转的幅度。

 1 <!DOCTYPE html>
 2 <html>
 3     <head>
 4         <meta charset="utf-8">
 5         <title>rotate()</title>
 6         <style type="text/css">
 7             .source {
 8                 margin: 100px auto;
 9                 width: 300px;
10                 height: 200px;
11                 border: 1px solid blue;
12             }
13             .source div {
14                 width: 300px;
15                 height: 200px;
16                 background: green;
17                 line-height: 200px;/*行高*/
18                 text-align: center;
19                 color: #fff;
20                 -webkit-transform: rotate(-20deg);
21                 -moz-transform: rotate(-20deg);
22                 -o-transform:rotate(-20deg);
23                 transform: rotate(-20deg);
24             }
25             .source span {
26                 display: block;
27                 -webkit-transform: rotate(-90deg);
28                 -moz-transform: rotate(-90deg);
29                 -o-transform:rotate(-90deg);
30                 transform: rotate(-90deg);
31                 filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=3);/*兼容早期IE*/
32                 -ms-filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=3);/*怪异模式下不支持filter,应使用IE私有属性定义*/
33             }
34             /*如果这个值为正值,元素相对原点中心顺时针旋转;如果这个值为负值,元素相对原点中心逆时针旋转*/
35         </style>
36     </head>
37     <body>
38         <div class="source">
39             <div>
40                 <span>我不想旋转</span>
41             </div>
42         </div>
43     </body>
44 </html>

效果如下:

 

2、2D缩放

  scale(<number>[,number]):该函数包含两个参数,分别用来定义宽和高缩放比例。正数值基于指定的宽度和高度放大元素;负数值不会缩小元素,而是翻转元素(如文字被反转),然后再缩放元素。使用小于1的小数(如0.5)可以缩小元素。如果第2个参数省略,则第2个参数等于第1个参数。

 1 <!DOCTYPE html>
 2 <html>
 3     <head>
 4         <meta charset="utf-8">
 5         <title>scale()</title>
 6         <style type="text/css">
 7             div {
 8                 width: 100px;
 9                 height: 100px;
10                 background: orange;
11                 color: #fff;
12                 line-height: 100px;
13                 text-align: center;
14             }
15             div:hover {
16                 opacity: 1;
17                 -webkit-transform: scale(1.2 , 1,2);
18                 -moz-transform: scale(1.2 , 1.2);
19                 -o-transform:scale(1.2,1.2);
20                 transform: scale(1.2 , 1.2);
21             }
22         </style>
23     </head>
24     <body>
25         <div>我将变大</div>
26     </body>
27 </html>

效果图如下:

3、2D倾斜

  skew(<angle>[,angle]):该函数包含两个参数值,分别用来定义x轴和y轴坐标倾斜的角度。如果省略了第2个参数,则第2个参数默认值为0。

 1 <!DOCTYPE html>
 2 <html>
 3     <head>
 4         <meta charset="utf-8">
 5         <title>skew()</title>
 6         <style type="text/css">
 7             .source {
 8                 margin: 100px auto;
 9                 width: 300px;
10                 height: 200px;
11                 border: 1px solid blue;
12             }
13             .source div {
14                 width: 300px;
15                 height: 200px;
16                 background: green;
17                 line-height: 200px;/*行高*/
18                 text-align: center;
19                 color: #fff;
20                 -webkit-transform: skew(-20deg,-20deg);
21                 -moz-transform: skew(-20deg,-20deg);
22                 transform: skew(-20deg,-20deg);
23             }
24             .source span {
25                 display: block;
26                 -webkit-transform: skew(20deg,20deg);
27                 -moz-transform: skew(20deg,20deg);
28                 transform: skew(20deg,20deg);
29             }
30             /*如果这个值为正值,元素相对原点中心顺时针旋转;如果这个值为负值,元素相对原点中心逆时针旋转*/
31         </style>
32     </head>
33     <body>
34         <div class="source">
35             <div>
36                 <span>我不想扭曲</span>
37             </div>
38         </div>
39     </body>
40 </html>

效果图如下:

 4、2D矩阵

  matrix()是矩阵函数,调用该函数可以非常灵活地实现各种变形效果,如倾斜(skew)、缩放(scale)、旋转(rotate)以及位移(translate)。

  matrix(<number>,<number>,<number>,<number>,<number>,<number>):第1个参数控制x轴缩放,第2个参数控制x轴的倾斜,第3个参数控制y轴倾斜,第4个参数控制y轴缩放,第5个参数控制x轴移动,第6个参数控制y轴移动。配合使用前面4个参数,可以实现旋转效果。

 1 <!DOCTYPE html>
 2 <html>
 3     <head> 
 4         <meta charset="utf-8">
 5         <title>matrix</title>
 6         <style type="text/css">
 7             .wrapper {
 8               width: 300px;
 9               height: 200px;
10               border: 2px dotted red;
11               margin: 40px auto;
12             }
13             
14             .wrapper div {
15               width:300px;
16               height: 200px;
17               background: orange;
18               -o-transform: matrix(1,0,0,1,100,100);/*数学矩阵变换*/
19               -moz-transform: matrix(1,0,0,1,100,100);/*数学矩阵变换*/
20               -webkit-transform: matrix(1,0,0,1,100,100);/*数学矩阵变换*/
21               transform: matrix(1,0,0,1,100,100);/*数学矩阵变换*/
22             }
23         </style>
24     </head> 
25     <body>
26         <div class="wrapper">
27           <div></div>
28         </div>
29     </body>
30 </html>

效果图如下:

5、变形原点

  CSS变形的原点默认为对象的中心点,如果要改变这个中心点,可以使用transform-origin属性进行定义。transform-origin属性的初始值为50% 50%,适用于块状元素和内联元素。transform-origin接受两个参数,他们可以是百分比、em、px等具体的值,也可以是left、center、right或者top、middle、bottom等描述性关键字。

 1 <!DOCTYPE html>
 2 <html>
 3     <head>
 4         <meta charset="utf-8">
 5         <title>transform-origin2</title>
 6         <style type="text/css">
 7             ul.polaroids{
 8                 margin-left: 120px;
 9             }
10             ul.polaroids li{
11                 display: inline;
12             }
13             ul.polaroids a{
14                 background: #fff;
15                 display: inline;
16                 float: left;
17                 margin: 0 0 27px 30px;
18                 width: auto;
19                 padding: 10px 10px 15px;
20                 text-align: center;
21                 text-decoration: none;
22                 color: #333;
23                 box-shadow: 0 3px 6px rgba(0,0,0,0.25);
24             }
25             ul.polaroids img{
26                 display: block;
27                 height: 140px;
28                 margin-bottom: 12px;
29             }
30             ul.polaroids a:after{
31                 content: attr(title);
32             }
33             /*变形第一个对象*/
34             ul.polaroids li:nth-child(1) a{
35                 /*以左上角为原点*/
36                 transform-origin: 0 0;
37                 transform: rotate(30deg);
38             }
39             ul.polaroids li:nth-child(2) a{
40                 /*以右上角为原点*/
41                 transform-origin:  top right;
42                 transform: rotate(-30deg);
43             }
44         </style>
45     </head>
46     <body>
47         <ul class="polaroids">
48             <li><a href="1" title="相识"><img src="../image/baby2.jpg"></a></li>
49             <li><a href="2" title="凝视"><img src="../image/baby3.jpg"></a></li>
50         </ul>
51     </body>
52 </html>

效果图如下:

posted on 2020-01-19 15:50  大黑ylx  阅读(184)  评论(0编辑  收藏  举报