代码改变世界

Css3 Transform

2012-07-04 10:44  BlackBird  阅读(404)  评论(0编辑  收藏

简介

通过对于元素进行transform设置达到一些变形的效果

transform包含以下几种:

  • n  rotate 旋转
  • n  skew 扭曲
  • n  scale缩放
  • n  translate 移动
  • matrix 矩阵变换

支持的浏览器

  目前支持application cache的浏览器如下:

  • n  IE 9+
  • n  Firefox 3.6+
  • n  Chome 17+
  • n  Safari 5+
  • n  Opera1 1.6+
  • n  Android browser 2.1+
  • n  Ios safari 3.2+

    

语法

标准写法

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

 

临时写法:

  • n  webkit内核: -webkit-transform
  • n  Mozilla内核:  -moz-transform
  • n  Opera内核: -o-transform
  • n  Ms:  -ms-tranform

 

transform-function

 

属性

参数

描述

translate

(<translation-value>[, <translation-value>]) 

移动

translateX

(<translation-value>) 

沿x轴移动

translateY

(<translation-value>)

沿y轴移动

scale

(<number>[, <number>])

缩放

scaleX

(<number>)

在x轴缩放

skew

(<angle> [, <angle>])

斜切变换

skewX

(<angle>)

沿x轴斜切变换

skewY

(<angle>)

沿Y轴斜切变换

rotate

(<angle>) 

旋转角度,正数顺时针

matrix

(<number>, <number>, <number>, <number>, <number>, <number>) 

以变换矩阵的形式指定一个2D变换

与transform配套的还有一个transform-origin,不设置的话,转换的中心点在元素的中心。可以通过设置transform-origin来指定一个元素的基点。设置的方式同background-position

 

Demo

<!DOCTYPE HTML>
<html lang="en-US">
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<style type="text/css">
/* 基础样式 */
.menu ul {padding: 0 10px;  } 
.menu ul li{list-style: none;} 
.menu ul li a{ color: #fff; float: left; margin: 30px 2px; font-size: 14px; height: 50px; line-height: 50px; text-align: center; width: 200px; padding: 10px 1px; background: #151515; -moz-border-radius: 0 0 5px 5px; -webkit-border-radius: 0 0 5px 5px; border-radius: 0 0 5px 5px; -moz-box-shadow: 0 0 1px #ccc,inset 0 0 2px #fff; -webkit-box-shadow: 0 0 1px #ccc,inset 0 0 2px #fff; box-shadow: 0 0 1px #ccc,inset 0 0 2px #fff; text-shadow: 0 1px 1px #686868; text-decoration: none; } 
.menu ul li a{ background:#999; } 

/* 特性demo */
.menu ul li.translate a:hover { -moz-transform: translate(-10px,-10px); -webkit-transform: translate(-10px,-10px); -o-transform: translate(-10px,-10px); -ms-transform: translate(-10px, -10px); transform: translate(-10px,-10px); }
.menu ul li.translate-x a:hover { -moz-transform: translateX(-10px); -webkit-transform: translateX(-10px); -o-transform: translateX(-10px); -ms-transform: translateX(-10px); transform: translateX(-10px);  }
.menu ul li.translate-y a:hover { -moz-transform: translateY(-10px); -webkit-transform: translateY(-10px); -o-transform: translateY(-10px); -ms-transform: translateY(-10px); transform: translateY(-10px);  }
.menu ul li.rotate a:hover { -moz-transform: rotate(45deg); -webkit-transform: rotate(45deg); -o-transform: rotate(45deg); -ms-transform: rotate(45deg); transform: rotate(45deg);  }
.menu ul li.scale a:hover { -moz-transform: scale(0.8,0.8); -webkit-transform: scale(0.8,0.8); -o-transform: scale(0.8,0.8); -ms-transform: scale(0.8,0.8); transform: scale(0.8,0.8);  }
.menu ul li.scale-x a:hover { -moz-transform: scaleX(0.8); -webkit-transform: scaleX(0.8); -o-transform: scaleX(0.8); -ms-transform: scaleX(0.8); transform: scaleX(0.8);  }
.menu ul li.scale-y a:hover { -moz-transform: scaleY(1.2); -webkit-transform: scaleY(1.2); -o-transform: scaleY(1.2); -ms-transform: scaleY(1.2); transform: scaleY(1.2);  }
.menu ul li.skew a:hover { -moz-transform: skew(45deg,15deg); -webkit-transform: skew(45deg,15deg); -o-transform: skew(45deg,15deg); -ms-transform: skew(45deg,15deg); transform: skew(45deg,15deg);  }
.menu ul li.skew-x a:hover { -moz-transform: skewX(-30deg); -webkit-transform: skewX(-30deg); -o-transform: skewX(-30deg); -ms-transform: skewX(-30deg); transform: skewX(-30deg);  }
.menu ul li.skew-y a:hover { -moz-transform: skewY(30deg); -webkit-transform: skewY(30deg); -o-transform: skewY(30deg); -ms-transform: skewY(30deg); transform: skewY(30deg);  }
.menu ul li.matrix a:hover { -moz-transform: matrix(1,1,-1,0,0,0); -webkit-transform: matrix(1,1,-1,0,0,0); -o-transform: matrix(1,1,-1,0,0,0); -ms-transform: matrix(1,1,-1,0,0,0); transform: matrix(1,1,-1,0,0,0);  }
</style>
</head>
<body>
<div class="menu"> 
    <ul class="clearfix"> 
      <li class="item translate"><a href="#">translate(-10px,-10px)</a></li> 
      <li class="item translate-x"><a href="#">translateX(-10px)</a></li> 
      <li class="item translate-y"><a href="#">translateY(-10px)</a></li>
      <li class="item rotate"><a href="#">rotate(45deg)</a></li> 
      <li class="item scale"><a href="#">scale(0.8,0.8)</a></li> 
      <li class="item scale-x"><a href="#">scaleX(0.8)</a></li> 
      <li class="item scale-y"><a href="#">scaleY(1.2)</a></li> 
      <li class="item skew"><a href="#">skew(45deg,15deg)</a></li> 
      <li class="item skew-x"><a href="#">skewX(-30deg)</a></li> 
      <li class="item skew-y"><a href="#">skewY(30deg)</a></li> 
      <li class="item matrix"><a href="#">matrix(1,1,-1,0,0,0)</a></li> 
    </ul> 
</div>

</body>
</html>

 

 

 

注意事项

         Transform设置多个属性时,属性间用空格隔开

         Transform 的本质:我们的任何一个html元素渲染完成后可以得到一张位图,把这张位图上所有的点都做一次矩阵运算,将得到一张的新的位图

html 的结构没有改变依然存在文档流,只是元素的外观被repaint后展示给用户,其他元素的布局不受影响