css3中的transform

1、transform属性实现了一些可用SVG实现的同样的功能。它可用于内联(inline)元素和块级(block)元素。它允许我们旋转、缩放和移动元素,并且该元素 下的所有子元素 随着参数的设置 旋转、缩放 和移动。

他有几个属性值:

(1)  rotate(旋转)允许你通过传递一个度数值来转动一个对象;其值可取正、负。正值代表 顺时针旋转 负值代表逆时针旋转。例如:rotate(20deg) 顺时针旋转20度。

(2) scale是一个缩放功能,它使用一个或者两个正数和负数以及小数作为参数;两参数的含义:依次x轴缩放 y轴缩放,   正数 代表放大,负数代表缩小。 当使用一个参数时表示X轴和Y轴的缩放相同;例如: scale(1.0, 0.75) 或则 scale(-0.5, 1)  或则 scale(0.5)。

(3) translate就是基于X和Y 坐标重新定位元素,当使用一个参数时表示X轴和Y轴的参数相同;参数也可取正负,x轴: 正值代表向右移动, 负值代表 向左移动,y轴:正值代表 向下移动 , 负值 代表向上移动  。例如: translate(10px,-2px);

(4) skew倾斜(ps中的斜切),参数是度数,当使用一个参数时表示X轴和Y轴的参数相同;

(5) matrix矩阵变换,就是基于X和Y 坐标重新定位元素,它使用6个参数,这个属性和线性矩阵类似,弄的我有点头大,基本上用上面的四个属性就差不多了。

2、transform-origin是变形原点,也就是该元素围绕着那个点变形或旋转,该属性只有在设置了transform属性的时候起作用;

transform-origin接受两个参数,它们可以是百分比,em,px等具体的值,也可以是left,center,right,或者 top,center,bottom等描述性参数 ;

语法:-moz-transform-origin: [ <percentage> | <length> | left | center | right ][ <percentage> | <length> | top | center | bottom ]

        top left | left top 等价于 0 0;
        top | top center | center top 等价于 50% 0
        right top | top right 等价于 100% 0
        left | left center | center left 等价于 0 50%
        center | center center 等价于 50% 50%(默认值)
        right | right center | center right 等价于 100% 50%
        bottom left | left bottom 等价于 0 100%
        bottom | bottom center | center bottom 等价于 50% 100%
        bottom right | right bottom 等价于 100% 100%

这个参数值 我还是用百分比,em,px等具体的值 比较直观,描述性参数看的我头大。

目前这两个属性得到了除去ie以外各个主流浏览器webkit,firefox,opera的支持,属性名分别为 -webkit-transform,-moz-transform,-o-transform;

 

我单独做了简单的例子

View Code
1 .text-list { width: 500px; height: 460px; padding-top:15px; background: #fff; box-shadow: 5px 5px 6px #000; }
2 .text-list li { line-height: 28px; }
3
4 .ul-one { -moz-transform: rotate(5deg) ; } /* 针对ul设置 则整体都会有所倾斜 */
5 .one { -moz-transform: rotate(5deg) scale(1.00, 1.50); }/* 设置倾斜 和缩放*/
6 .two a { -moz-transform: rotate(3deg) ; } /*设置li的倾斜*/
7 .three { -moz-transform: rotate(1deg); }
8 .three span { color:#f00; -moz-transform: rotate(-5deg); } /*内联元素的倾斜度*/
9 .four a { -moz-transform: skew(7deg, 8deg); }
  
View Code
1 <div class="text-list">
2 <ul class="ul-one">
3 <li>li的列表</li>
4 <li><a href="#">缩放大小比例</a></li>
5 <li><a href="#">旋转角度</a><span>缩放大小比例</span></li>
6 <li><a href="#"><span>倾斜比例</span></a></li>
7 </ul>
8 <ul>
9 <li class="one">设置字体的倾斜度 rotate(5deg) 和 缩放比例 scale(1.00, 1.50); </li>
10 <li class="two"><a href="#">倾斜度</a></li>
11 <li class="three"><a href="#">这个外层元素已经设倾斜了</a><span>对span有设置了倾斜 两者没有影响</span></li>
12 <li class="four"><a href="#">字体的斜切变换</a></li>
13 </ul>
14  </div>

效果如图

但是我又开始考虑一个问题: 我把它(transform)变形了 会不会影响其他元素的布局啊。

看看这吧

View Code
1 <p class="p-con">transform 的各个属性的用法</p>
2  <p>变形后 会不会影响页面的布局呢?</p>
3  <p>咦?不影响,而且在其他元素的上面,怎么感觉好像是设置了绝对位置啊,可是明明我没有设置啊,这是为什么呢</p>
View Code
1 .p-con { font-weight: bold; color: #f00; -moz-transform: rotate(15deg) scale(1.5, 1.5) skew(5deg, 8deg) translate(5px,-2px); -moz-transform-origin: 0 5px; }

效果如下

事实是 不影响,而且我也确实没设置它是绝对位置 ,我在FF浏览器看他的结构,发现这样的 情况: 它实际的结构位置还是在原来的地方,而我们看到的确是倾斜的。这是为什么呢?

然后我又去了解了transform的原理

CSS3:transform与transition背后的数学原理 :http://www.21zzz.com/design/css/2011/0116/29516.html

这些矩阵的算法 我也不大懂,但是我看到关键的一句话:

transform跟矩阵乘法的关系,我们的任何一个html元素渲染完成后可以得到一张位图,把这张位图上所有的点都做一次矩阵运算,将得到一张的新的位图,这就是transform的基本含义。

我自己的理解是:html 的结构没有改变依然存在文档流,只是元素的外观被repaint(重绘)一下,所以浏览器按照transform的参数又做一次矩阵运算 ,渲染过的新的位图展现给我们了。所以不会影响其他的布局。

关于这个属性 我认为对图片设置比较不错。比较符合用户的体验性。

以下是用 伪类+ box-shadow +transform 进行设置的。

View Code
1 <div class="pic-list">
2 <a href="#" class="pic3"><img src="style/1.jpg" /></a>
3 <a href="#" class="pic2"><img src="style/2.jpg" /></a>
4 <a href="#" class="pic1"><img src="style/3.jpg" /></a>
5  </div>

View Code
1 .pic-list { position:relative; width: 960px; margin: 35px auto; }
2 .pic-list a { display: block; width: 960px; text-align: center; }
3 .pic-list a img { padding: 8px; background: #fff; box-shadow: 2px 5px 6px #2b2b2b; }
4
5 .pic1 img { position: absolute; top: 0; left: 182px; z-index: 2; }
6 .pic2 img { position: absolute; top: 15px; left: 200px; z-index: 3; }
7 .pic3 img { position: absolute; top: 61px; left: 300px; z-index: 4; }
8
9 /*使用伪类 、 旋转图片不同的角度来实现 图片闪动的效果*/
10 .pic1:hover img { -moz-transform: rotate(4deg); }
11 .pic2:hover img { -moz-transform: rotate(-8deg) scale(1.00, 1.50); }
12 .pic3:hover img { -moz-transform: rotate(-10deg); }
posted @ 2011-06-17 15:54  limanclear  Views(4343)  Comments(1Edit  收藏  举报