一,浏览器渲染原理:
网页不仅应该被快速加载,同时还应该流畅运行,比如快速响应的交互,如丝般顺滑的动画等。大多数设备的刷新频率是60次/秒,也就说是浏览器对每一帧画面的渲染工作要在16ms内完成,超出这个时间,页面的渲染就会出现卡顿现象,影响用户体验。为了保证页面的渲染效果,需要充分了解浏览器是如何处理HTML/JavaScript/CSS的。
浏览器工作流程步骤:
☑️ 根据html构建html树(DOM)
☑️ 根据CSS构建CSS树(CSSOM)
☑️ 将两棵树合并成一颗渲染树(render tree)
☑️ ️Layout布局(文档流、盒模型、计算大小和位置)
☑️ ️Paint绘制(把边框颜色、文字颜色、阴影等画出来)
☑️ ️Compose合成(根据层叠关系展示画面)

CSS动画优化:
javascript优化:使用requestAnimationFrame 代替 setTimeout 或 setInterval
css优化: 使用will-change 或 translate
参考:developers.google.com/web/fundame…
二,CSS 动画的两种做法(transition 和 animation)
1.transition
作用:补充中间帧。
语法: transition: 属性名 时长 过渡方式 延迟
transition: left 200ms linear
可以用逗号分隔两个不同属性:transition: left 200ms,top 400ms
可以用all代表所以属性: transition: all 200ms
过渡方式: Linear:线性变化。
Ease:首尾变缓。
Ease-in:开始慢,后面快。
Ease-out:开始块,后面慢。
Ease-in-out:首尾慢,中间快。
cubic-bezier:三次贝塞尔曲线。
等等....
注意!!
并不是所以属性都能过度:
display: none=>block 没法过渡,一般改成visibility:hidden => visible
disolay和visibility的区别。
background颜色,opacity透明度。
局限性:
transition的优点在于简单易用,但是它有几个很大的局限。
(1)transition需要事件触发,所以没法在网页加载时自动发生。
(2)transition是一次性的,不能重复发生,除非一再触发。
(3)transition只能定义开始状态和结束状态,不能定义中间状态,也就是说只有两个状态。
(4)一条transition规则,只能定义一个属性的变化,不能涉及多个属性。
2.animation
animation 属性是 animation-name: myfirst; 动画名
animation-duration: 5s; 动画时长
animation-timing-function: linear; 动画变化效果方式,同transition
animation-delay: 2s; 动画延迟播放时间
animation-iteration-count: 3或者2.4或者infinite; 次数:3或者2.4或者infinite定义为无线循环
animation-direction: alternate; 规定动画是否在下一周期逆向地播放。默认是 "normal"。
animation-fill-mode: none | forwards | backwards | both; 填充模式
animation-play-state:running; 规定动画是否正在运行或暂停。默认是 "running"。