《CSS 知识总结》

152 阅读2分钟

一,浏览器渲染原理:

网页不仅应该被快速加载,同时还应该流畅运行,比如快速响应的交互,如丝般顺滑的动画等。大多数设备的刷新频率是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"。