浏览器渲染原理
渲染过程
- 根据HTML构建HTML树(DOM)
- 根据CSS构建CSS树
- 将两棵树合并成一颗渲染树(render tree)
- Layout布局(文档流、盒模型、计算大小和位置)
- Paint绘制(把边框颜色、文字颜色、阴影画出来)
- Compose合成(根据层叠关系展示画面)
一般用JS更新样式,更新样式时根据更新的属性有三种不同的渲染方式
1.JS/CSS->Style->Layout->Paint->Composite
2.JS/CSS->Style->Paint->Composite
3.JS/CSS->Style->Composite
显然这三种方式随着步骤的减少,能更好地优化性能;可以通过这个网站查询每个属性触发什么流程;例如盒子位移可以用定位的left或translate更新,用left会全都走一遍,但用translate只会进行合成,所以translate比left性能更好。
CSS动画
两种方式
一.transition 过渡
- 作用:补充中间帧
- 语法:
transition:属性名(或none或all)时长 过渡方式 延迟
用逗号分割两个属性
过渡方式具体记得有linear(线性)与非线性(ease等)
eg. transition:width 1.5s,height 1.5s;
具体详细可以看MDN
注意:不是所有属性都能过渡,例如display:none->block就不能过渡
二.animation
1.定义关键帧@keyframes
1.
@keyframes name{
from{
scale(1.0)
}
to{
scale(1.5)
}
}
2.
@keyframes name{
0%{
scale(1.0)
}
50%{
scale(1.2)
}
100%{
scale(1.5)
}
}
2.animation
anmation:动画名|时长|延迟|次数|方向|填充方式|是否暂停
时长:s|ms
过渡方式:与transition一样,例如linear和ease等
次数:1|2|3|infinite
方向:reverse|alternate|alternate-reverse
填充模式:none|forwards|backwards|both
是否暂停:paused|running
以上属性都有对应的单独属性(可以用js让按钮控制动画暂停和继续)