CSS3转换、过渡与动画

CSS转换

CSS3 Transform(让元素在一个坐标系统中变形,可移动、旋转和缩放元素)
transform : none / <transform-function> [ <transform-function> ]*;
/*默认值:transform: none;*/

兼容性:IE10+、FireFox16+、Chrome36+、Safari16+、Opera23+

2D转换 - rotate

rotate(通过指定的角度参数对原元素指定一个2D 旋转)
   -webkit-transform: rotate(45deg);
      -moz-transform: rotate(45deg);
       -ms-transform: rotate(45deg);
        -o-transform: rotate(45deg);
           transform: rotate(45deg);
/*angle指旋转角度,正数表示顺时针旋转,负数表示逆时针旋转*/

2D转换 - translate

translateX(x)(仅水平方向移动)
transform: translateX(<translation-value>);
translateY(Y)(仅垂直方向移动)
transform: translateY(<translation-value>);
translate(x, y)(水平方向和垂直方向同时移动)
transform: translate(<translation-value>[, <translation-value>]);
/*只写其中一个则只有水平 / 垂直移动*/

2D转换 - scale

scaleX(x)(使元素仅水平方向缩放)
transform: scaleX(<number>);
/* scale()中不能用 % */
scaleY(y)(使元素仅垂直方向缩放)
transform: scaleY(<number>);
scale(x, y)(使元素水平方向和垂直方向同时缩放)
transform: scale(<number>[, <number>]);

2D转换 - skew

skewX(x)(使元素在水平方向扭曲变形)
transform: skewX(<angle>);
/*逆时针deg为正,顺时针deg为负,与rotate相反*/
skewY(y)(使元素在垂直方向扭曲变形)
transform: scaleX(<number>);
/*逆时针deg为负,顺时针deg为正,与rotate相同*/
skew(x, y)(使元素在水平和垂直方向同时扭曲)
transform: scaleX(<number>);
/*只写其中一个则只有水平 / 垂直扭曲*/

3D转换 - rotate

rotateX(指定对象在x轴上的旋转角度)
transform: rotateX(angle);
rotateY(指定对象在y轴上的旋转角度)
transform: rotateY(angle);
rotateZ(指定对象在z轴上的旋转角度)
transform: rotateZ(angle);
rotate3d(指定对象的3D旋转角度)
transform: rotate3d(x, y, z, angle);
/*参数不允许省略*/

3D转换 - translate

translateZ(指定对象Z轴的平移,看不出来)
transform: translateZ(z);
translate3d(指定对象的3D位移)
transform: translate3d(x, y, z);
/*参数不允许省略*/

3D转换 - scale

缩放scaleZ(指定对象的z轴缩放,看不出来)
transform: scaleZ(z);
scale3d(指定对象的3D缩放)
transform: scale3d(x, y, z);
/*参数不允许省略*/

Transform与坐标系统

transform-origin(允许更改转换元素的位置,即转轴)
transform-origin: x-axis y-axis z-axis;
/*单位px / % / left / top / ...*/

CSS3 矩阵

matrix(元素2D平面的移动变换(transform),2D变换矩阵为3*3)
transform: matrix(a, b, c, d, tx, ty);
/*transform: matrix(1, 0, 0, 1, 30, 30);
对应 a=1, b=0, c=0, d=1, e=30, f=30
根据这个矩阵偏移元素的中心点,假设是(0, 0),即x = 0, y = 0
变换后,x=ax+cy+e=1*0+0*0+30=30,y=bx+dy+f=0*0+0*1+30=30
于是,整个元素的中心点从(0, 0)变成了(30, 30),整个元素就发生了平移
所以transform: matrix(1, 0, 0, 1, x, y)等同于transform: translate(x, y)*/

注意:matrix在FF浏览器下需添加单位,webkit内核默认px

matrix3d(元素3D的移动变换(transform),3D变换则是4*4的矩阵)
transform: matrix3d(sx, 0, 0, 0, 0, sy, 0, 0, 0, 0, sz, 0, 0, 0, 0, 1);
/*等同于transform: scale3d(x, y, z);*/

CSS3 矩阵转换

矩阵matrix缩放(scale)

matrix(sx, 0, 0, sy, 0, 0) —— scale(sx, sy)

矩阵matrix旋转(rotate)

matrix(cosθ, sinθ, -sinθ, cosθ, 0, 0) —— rotate(θdeg)

矩阵matrix拉伸(skew)

matrix(1, tanθy, tanθx, 1, 0, 0) —— skew(θxdeg, θydeg)

CSS3 矩阵应用

矩阵matrix镜像对称效果
y=kx.jpg
transform: matrix((1-k*k) / (1+k*k), 2k / (1 + k*k), 2k / (1 + k*k), (k*k - 1) / (1+k*k), 0, 0);

CSS3 扩展属性

transform-style(指定嵌套元素是怎样在三维空间中呈现)
  -webkit-transform-style: preserve-3d;
     -moz-transform-style: preserve-3d;
      -ms-transform-style: preserve-3d;
       -o-transform-style: preserve-3d;
          transform-style: preserve-3d;
/*默认值:transform-style: flat; 属性写在父元素上*/
perspective(指定观察者与「z=0」平面的距离,使具有三维位置变换的元素产生透视效果)
  -webkit-perspective: 500px;
     -moz-perspective: 500px;
      -ms-perspective: 500px;
       -o-perspective: 500px;
          perspective: 500px;
/*默认值:none*/
perspective-origin(指定透视点的位置)
  -webkit-perspective-origin: x-axis y-axis;
     -moz-perspective-origin: x-axis y-axis;
      -ms-perspective-origin: x-axis y-axis;
       -o-perspective-origin: x-axis y-axis;
          perspective-origin: x-axis y-axis;
/*默认值:perspective-origin: 50% 50%;*/
backface-visibility(指定元素背面(翻转后朝向)面向用户时是否可见)
backface-visibility: visible / hidden;
/*默认值:visible*/

CSS3 过渡(Transition)

允许css的属性值在一定的时间区间内平滑地过渡,在鼠标单击、获得焦点、被点击或对元素任何改变中触>发,并圆滑地以动画效果改变CSS的属性值。
兼容性:IE10+、FireFox16+、Chrome26+、Safari6.1+、Opera12.1+

transition-property(规定设置过渡效果的 CSS 属性名)
   -webkit-transition-property: none / all / property;
      -moz-transition-property: none / all / property;
       -ms-transition-property: none / all / property;
        -o-transition-property: none / all / property;
           transition-property: none / all / property;
/*参数说明
- none
- all,默认值
- property(CSS属性名) 例如color、opacity...*/
transition-duration(规定完成过渡效果需要多少时间)
transition-duration: time;
/*参数说明
- 规定完成过渡效果需要花费的时间(以秒或毫秒计)
- 默认值是 0*/
transition-timing-function(规定速度效果的速度曲线)
transition-timing-function: ease / linear / ease-in / ease-out / ease-in-out
                            step-start / step-end / steps(<integer>, [ start / end ]) 
                            cubic-bezier(<number>, <number>, <number>, <number>);
/*参数说明
− linear:线性过渡。等同于贝塞尔曲线(0.0, 0.0, 1.0, 1.0)
− ease:平滑过渡。等同于贝塞尔曲线(0.25, 0.1, 0.25, 1.0)
− ease-in:由慢到快。等同于贝塞尔曲线(0.42, 0, 1.0, 1.0)
− ease-out:由快到慢。等同于贝塞尔曲线(0, 0, 0.58, 1.0)

− ease-in-out:由慢到快再到慢。等同于贝塞尔曲线(0.42, 0, 0.58, 1.0)(最佳效果)

− step-start:等同于 steps(1, start)
− step-end:等同于 steps(1, end)
− steps(<integer>[, [ start | end ] ]?):接受两个参数的步进函数
                                         第一个参数:必须为正整数,指定函数的步数
                                         第二个参数:取值可是start或end,指定每一步的值发生变化的时间点
                                         第二个参数:可选,默认值为end
− cubic-bezier(<number>, <number>, <number>, <number>):
  特定的贝塞尔曲线类型,4个数值需在[0, 1]区间内*/
transition-delay(定义过渡效果何时开始)
transition-delay: time;
/*参数说明
- 指定秒或毫秒数之前要等待切换效果开始
- 默认值是 0*/
transition复合写法
transition: property duration timing-function delay;

CSS3动画

兼容性:IE10+、FireFox16+、Chrome43+、Safari9+、Opera30+、Android(-webkit-)

animation-name(规定需要绑定到选择器的 keyframe 名称)
animation-name: keyframename / none;
/*参数说明
 keyframename:指定要绑定到选择器的关键帧的名称;
 none:指定有没有动画(可用于覆盖从级联的动画)
*/
Keyframes(关键帧,可以指定任何顺序排列来决定Animation动画变化的关键位置)
@keyframes animationname {
   keyframes-selector {
       css-styles;
   }
}
/*参数说明
 animationname:必写项,定义animation的名称
 keyframes-selector:必写项,动画持续时间的百分比,0-100%、from (0%)、to (100%)
 css-styles:必写项,一个或多个合法的CSS样式属性
 @keyframes animationname在style中单独写入
*/
animation-duration(规定完成动画所花费的时间,以秒或毫秒计)
animation-duration: time;
/*参数说明
 time指定动画播放完成花费的时间。默认值为 0,意味着没有动画效果
*/
animation-timing-function(规定动画的速度曲线)
animation-timing-function: ease / linear / ease-in / ease-out / ease-in-out
                            step-start / step-end / steps(<integer>, [ start / end ]) 
                            cubic-bezier(<number>, <number>, <number>, <number>);
/*参数说明
− linear:线性过渡。等同于贝塞尔曲线(0.0, 0.0, 1.0, 1.0)
− ease:平滑过渡。等同于贝塞尔曲线(0.25, 0.1, 0.25, 1.0)
− ease-in:由慢到快。等同于贝塞尔曲线(0.42, 0, 1.0, 1.0)
− ease-out:由快到慢。等同于贝塞尔曲线(0, 0, 0.58, 1.0)

− ease-in-out:由慢到快再到慢。等同于贝塞尔曲线(0.42, 0, 0.58, 1.0)(最佳效果)

− step-start:等同于 steps(1, start)
− step-end:等同于 steps(1, end)
− steps(<integer>[, [ start | end ] ]?):接受两个参数的步进函数
                                         第一个参数:必须为正整数,指定函数的步数
                                         第二个参数:取值可是start或end,指定每一步的值发生变化的时间点
                                         第二个参数:可选,默认值为end
− cubic-bezier(<number>, <number>, <number>, <number>):
  特定的贝塞尔曲线类型,4个数值需在[0, 1]区间内*/
animation-delay(规定在动画开始之前的延迟)
animation-delay: time;
/*参数说明
 可选。定义动画开始前等待的时间,以秒或毫秒计。默认值为0
 如果值为负,则动画马上开始,但会跳过相应的时间进入动画
*/
animation-iteration-count(规定动画应该播放的次数)
animation-iteration-count: infinite / <number>;
/*参数说明
 <number>为数字,其默认值为“1”;infinite为无限次数循环
*/
animation-direction(规定是否应该轮流反向播放动画)
animation-direction: normal / reverse / alternate / alternate-reverse / initial / inherit;
/*参数说明
 normal:正常方向
 reverse:反方向运行
 alternate:先正后反,并持续交替运行(需依赖infinite)
 alternate-reverse:先反后正,并持续交替运行(需依赖infinite)
*/
animation-fill-mode(规定当动画完成或当动画有延迟未开始播放时,要应用到元素的样式)
animation-fill-mode: none / forwards / backwards / both / initial / inherit;
/*参数说明
 none:默认值。不设置对象动画之外的状态
 forwards:设置对象状态为动画结束时的状态
 backwards:设置对象状态为动画开始时的状态
 both:设置对象状态为动画结束或开始的状态
*/
animation-play-state(规定动画运行或暂停)
animation-play-state: paused / running;
/*参数说明
 paused:指定暂停动画
 running:默认值,指定正在运行的动画
*/
animation(复合写法)
animation: name duration timing-function delay iteration-count direction fill-mode play-state;
/*参数说明
 默认写在前面的时间为duration
*/
will-change(增强页面渲染性能)

即提前通知浏览器元素将要做什么动画,让浏览器提前准备合适的优化设置

will-change: auto / scroll-position / contents / <custom-ident> / <animateable-feature>;
/*参数说明
 auto:此关键字表示没有特定的意图,适用于它通常所做的任何启发式和优化
 scroll-position:表示将要改变元素的滚动位置
 contents:表示将要改变元素的内容
 <custom-ident>:明确指定将要改变的属性与给定的名称
 <animateable-feature>:可动画的一些特征值,比如left、top、margin等
*/
兼容性:IE13+、FireFox47+、Chrome49+、Safari9.1+、Opera39+、IOS9.3+、Android52+
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,126评论 6 481
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,254评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 152,445评论 0 341
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,185评论 1 278
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,178评论 5 371
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,970评论 1 284
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,276评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,927评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,400评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,883评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,997评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,646评论 4 322
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,213评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,204评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,423评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,423评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,722评论 2 345

推荐阅读更多精彩内容