CSS动画之transition 、tranform和animation

1.浏览器渲染原理

1.1 步骤

  • 根据HTML构建HTML树(DOM)
  • 根据CSS构建CSS树(CSSDOM)
  • 将两棵树合并成一棵渲染树(render tree)
  • Layout布局(文档流、盒模型、计算大小和位置)
  • Paint绘制(把边框颜色、文字颜色、阴影等画出来)
  • Compose合成(根据层叠关系展示画面)

2.1 三种更新方式

  • JS/CSS—样式——布局——绘制——合成
  • JS/CSS—样式——绘制——合成(没有改变元素位置大小等,只更改背景颜色等,不需要再次计算布局)
  • JS/CSS—样式——合成(没有改颜色,也没有改位置大小等,不需要再次绘制和布局)

2.CSS 动画(transition 、tranform和animation)

2.1 transition过渡

2.1.1 定义

允许CSS值在一定的时间内平滑的过渡,需要事件(单击/获取焦点/失去焦点等)的触发,用于补充中间帧

2.1.2 语法
  • transition:属性名 时长 过渡方式 延迟
transition:property duration | timing-function | delay
//实例
transition:left 200ms liner
  • 可以用逗号分隔两个不同属性
transition:left 200ms,top 400ms
  • 可以用all代表所有属性
transition:all 200ms
  • 过渡方式
    linear 匀速过渡
    ease 开始和结束时缓慢
    ease-in 开始时缓慢
    ease-out 结束时缓慢
    ease-in-out 类似于ease,但幅度相较而言比较大
    cubic-bezier 在 cubic-bezier 函数中自己的值。可能的值是从 0 到 1 的数值。
    step-start 直接位于结束处
    step-end 位于开始处经过时间间隔后结束
2.1.3 注意事项
  • 并不是所有属性都可以过渡,例如display:none => blcok,需通过改成visibiity:hidden => visible解决
  • 对于可以找到过渡规律的属性(例如background,opacity等),均可使用transition属性过渡
  • 过渡必须要有起始

2.2 tranform转换

2.2.1 用途
  • 向元素应用2d或3d转换,对元素进行运动移动、缩放、转动、拉长或拉伸
  • 使用方法
transform: none|transform-functions;
2.2.2 属性
  • transform:none:定义不进行转换

  • transform:translate(x,y):定义2d移动转换,x数值为横向移动转换,y数值为纵向移动转换

  • transform:scale(x,y):定义2d缩放转换,x数值为横向缩放转换,y数值为纵向缩放转换

  • transform:rorate(旋转角度)

.itemName {
//顺时针旋转45°,负值为逆时针旋转
    transform: rotate(45deg)
}
  • transform:skew(x-angle,y-angle/角度):定义沿着x轴和y轴的2d倾斜转换
//倾斜20°
.itemName {
    transform: skew(20deg)
}
  • perspective(n):为 3D 转换元素定义透视视图。

*更多属性参考:
MDN:https://developer.mozilla.org/zh-CN/docs/Web/CSS/transform-function
W3C:https://www.w3school.com.cn/cssref/pr_transform.asp

2.3 animation动画

2.3.1 用途及使用方法
  • 用于制作关键帧动画
  • 使用方法:将属性写进需要动画的元素对应的css中,格式如下(按需添加对应属性即可)
  • animaition:名称 时长 | 过渡方式 | 延迟 | 次数 | 方向 | 填充模式 | 是否暂停
animation: name duration | timing-function | delay | iteration-count | direction | animation-fill-mode | animation-play-state
2.3.2 属性
  • animation-name:规定需要绑定到选择器的keyframe名称
//ItemChange是自定义的名字,也是animation中name的值
@keyframes ItemChange {
    0% {
        width:50px;
    }
    50% {
        width:100px;
    }
    100% {
        width:150px;
    }
}
  • animation-duration:规定动画所花费的时间(持续的时间),以秒或毫秒计算

  • animation-timing-function:用于定义函数变化速度曲线,即过渡方式
    linear 动画从头到尾速度相同,即线性过渡
    ease 默认值,动画低速开始,随后加速,在结束前变慢
    ease-in 动画低速开始
    ease-out 动画低速结束
    ease-in-out 动画低速开始和结束
    cubic-bezier(n,n,n,n) 在 cubic-bezier 函数中自己的值。可能的值是从 0 到 1 的数值。

  • animation-delay:规定动画开始之前的延迟,以秒或毫秒计算

  • animation-iteration-count:表示动画的播放次数
    n 定义动画播放次数
    infinite 规定动画应该无限次播放

  • animation-derection:规定是否反向轮流播放动画,即动画的播放方向
    normal:默认值,规定动画应该正常播放
    reverse:动画直接跳至结束,从结束处开始轮流播放
    alternate:规定动画应该轮流反向播放
    alternate-reverse:动画直接跳至结束,再从结束处开始往复交替轮流播放

  • animation-fill-mode:规定了动画的填充模式
    none:默认值,不改变默认行为
    forwards:当动画完成后,保持最后一个属性值,定义在最后一个关键帧里
    backwards:在 animation-delay 所指定的一段时间内,在动画显示之前,应用开始属性值(在第一个关键帧中定义)。
    both:向前和向后填充模式都被应用。

  • animation-play-state:规定动画是否暂停
    paused:规定动画已暂停
    running:规定动画正在播放

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,875评论 6 496
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,569评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,475评论 0 350
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,459评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,537评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,563评论 1 293
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,580评论 3 414
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,326评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,773评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,086评论 2 330
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,252评论 1 343
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,921评论 5 338
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,566评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,190评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,435评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,129评论 2 366
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,125评论 2 352

推荐阅读更多精彩内容