目前,css3发展还是比较迅速的,有几个属性:变形(transform)、转换(transition)和动画(animation)。在用CSS3制作动画时,我们经常使用的。

今天我们主要讲变形(transform)属性,那么 Transform到底是什么意思?我们从字面上理解就是变形,改变、变换的意思。

是的,在CSS3中,我们可以用Transform功能可以实现文字或图像的旋转、缩放、倾斜、移动等的变形。那么transform包括哪些属性呢?

transform的属性包括:

旋转rotate()、 扭曲skew()、 缩放scale()、 移动translate()、矩阵变形matrix()。

分别还有x、y之分,比如:rotateY() 和 rotateY() ,以此类推。我们可以将这几种变形结合使用,就会产生不同的效果。

transform浏览器兼容:

目前浏览器支持情况:Safari 3.1+、 Chrome 8+、Firefox 4+、Opera 10+、IE9+

接下来我们一起来看看CSS3中transform的旋转rotate、扭曲skew、缩放scale和移动translate具体如何实现,首先从transform的语法说起。

语法:

transform : none | <transform-function> [ <transform-function> ]*

具体就是:

transform: rotate | scale | skew | translate |matrix;

none:表示不进么变换;<transform-function>表示一个或多个变换函数,以空格分开;换句话说就是我们同时对一个元素进行transform的多种属性操作,例如rotate、scale、translate三种,大家要记住的一点就是transform中使用多个属性时,需要有空格隔开。

比如:

transform:otate(45deg) scale(1.5);

下面是分别对他们进行分析:

一、旋转rotate

CSS中使用rotate方法来实现对元素的旋转,在参数中加入角度值。

rotate(<angle>) :通过指定的角度参数对原元素实现一个2D rotation(2D 旋转),其中angle是指旋转角度,如果设置的值为正数表示顺时针旋转,如果设置的值为负数,则表示逆时针旋转。

我们使用时需先有transform-origin属性的定义。transform-origin定义的是旋转的基点,如果没有定义时,元素默认就以自己中心位置进行变化的。

下面我们来看一下示例:

首先说明一下,本节例子demo公用的css为:

公用css:

.wrap-bg{
    width:300px;
    height:150px;
    background:#000;
    margin-left:50px;
}
.wrap-bg div{
    width:100px;
    height:100px;
    background:#34A737;  
} 

示例:transform:rotate(45deg);

html:

<div class="wrap-bg"><div class="demo"></div></div>
css:
.demo{
    -moz-transform:rotate(45deg);
    -webkit-transform:rotate(45deg);
    transform:rotate(45deg)
}
效果:


 


二、移动translate

 移动translate我们分为三种情况:


1、translate(length,length):指定对象的X轴(水平方向)和Y轴(垂直方向)同时移动。第一个参数对应X轴,第二个参数对应Y轴。如果第二个参数未提供,则默认值为0。

2、translateX(length):指定对象X轴(水平方向)的平移。

3、translateY(length):指定对象Y轴(垂直方向)的平移。

length可以取正负值,X轴为负值时向左平移,Y轴为负值时向上平移,也可以根据transform-origin进行改变基点

示例:transform:translate(50px,20px):

css:

.demo1{
     -moz-transform:translate(30deg);
     -webkit-transform:translate(50px,20px);
     transform:translate(50px,20px)
}

效果:

 


三、缩放scale

缩放scale同样也分为三种情况:

1、scale(<number>[,<number>]): scale(x,y)使元素水平方向和垂直方向同时缩放(也就是X轴和Y轴同时缩放)。

2、scaleX(<number>) : scaleX(x)指定对象X轴的(水平方向)缩放

3、scaleY(<number>) : scaleY(y)指定对象Y轴的(垂直方向)缩放

<number>是缩放的倍数,如果其值大于1元素就放大,反之其值小于1,元素缩小。它们缩放中心点就是元素的中心位置。也可以通过transform-origin对元素的基点进行设置。

示例:transform:scale(2,1);

css:

.demo2{
    -moz-transform:scale(2,1);
    -webkit-transform:scale(2,1);
    transform:scale(2,1)
}

效果:

 


四、扭曲skew

扭曲skew同样也分为三种情况:

1、skew(<angle>[,<angle>]):指定对象skew transformation(斜切扭曲)。第一个参数是水平方向扭曲角度,第二个参数是垂直方向扭曲角度。

2、skewX(<angle>) : 指定对象X轴的(水平方向)扭曲

3、skewY(<angle>) : 指定对象Y轴的(垂直方向)扭曲

同样是以元素中心为基点,我们也可以通过transform-origin来改变元素的基点。

示例:transform:skew(45deg,30deg);

css:

.demo3{
    -moz-transform:skew(45deg,30deg);
    -webkit-transform:skew(45deg,30deg);
    transform:skew(30deg,30deg)
}
效果:


 


五、矩阵matrix

matrix(<number>, <number>, <number>, <number>, <number>, <number>) : 以一个含六值的(a,b,c,d,e,f)变换矩阵的形式指定一个2D变换,相当于直接应用一个[a b c d e f]变换矩阵。就是基于水平方向(X轴)和垂直方向(Y轴)重新定位元素,此属性值使用涉及到数学中的矩阵,在此我们简单了解

下CSS3中的transform还有这么一个属性值。

示例:

css:

.demo4{
    -moz-transform:matrix(0,1,1,1,10,10);
    -webkit-transform:matrix(0,1,1,1,10,10);
    transform:matrix(0,1,1,1,10,10);
}
效果:


 


六、关于transform-origin说明

关于transform-origin,他的主要作用就是让我们在进行transform动作之前可以改变元素的基点位置,没有使用transform-origin改变元素基点位置的情况下,我们元素默认基点就是其中心位置。但有时候我们需要在不同的位置对元素进行这些操作,那么我们就可以使用transform-origin来对元素进行基点位置改变,使元素基点不在是中心位置,以达到你需要的基点位置。下面我们主要来看看其使用规则:

transform-origin:X Y:用来设置元素的运动的基点(参照点)。默认点是元素的中心点。其中X和Y的值可以是百分值,em,px,其中X也可以是字符参数值left,center,right;Y和X一样除了百分值外还可以设置字符值。

下面我列出他们相对应的写法:

1、top left | left top 等价于 0 0 | 0% 0%

2、top | top center | center top 等价于 50% 0

3、right top | top right 等价于 100% 0

4、left | left center | center left 等价于 0 50% | 0% 50%

5、center | center center 等价于 50% 50%(默认值)

6、right | right center | center right 等价于 100% 50%

7、bottom left | left bottom 等价于 0 100% | 0% 100%

8、bottom | bottom center | center bottom 等价于 50% 100%

9、bottom right | right bottom 等价于 100% 100%

具体示例: transform-origin:left top

css:

.demo5{
    -moz-transform-origin:left top;
    -webkit-transform-origin:left top;
    -moz-transform:rotate(30deg);
   -webkit-transform:rotate(30deg);
    transform:rotate(30deg)
}
效果: