CSS性能优化

Posted by CodingWithAlice on June 28, 2021

CSS性能优化

一、写法优化

  • 简化选择器:id选择器不用嵌套;减少 * 通配符、[hidden=‘true’] 属性选择器;利用继承机制,少写新类名【CSS 选择器是从右向左进行匹配的,避免匹配的开销
  • 尽量避免重排:重新计算元素位置和几何结构
  • 减少使用昂贵属性 - 需要浏览器进行操作或计算的属性:box-shadow、border-radius、透明度、:nth-child等;
  • 动画尽量使用 GPU 加速
避免重排 - 修改样式时技巧:
  1. 不要一条条的修改dom的样式,预先定义好class,然后修改 dom 的classname
  2. 不要修改影响范围较大的dom
  3. 为动画元素使用绝对定位
  4. 不要table布局,因为一个很小的改动会造成整个table重新布局
  5. 避免设置大量的style属性』,通过设置style属性改变节点样式的话,每一次设置都会触发一次reflow,所以最好使用class属性
  6. 如果css里面有计算表达式,每次都会重新计算一遍,触发一次reflow

二、CSS文件加载优化

  • 删除不必要的样式;css 模块化 - 延迟加载非必要样式表;公共样式文件单独引入,缓存在本地
  • css 压缩
  • 避免使用 @import ,不能和 html 并发请求,浏览器解析到 css 文件才知道要下载另一个 css 文件,延后加载;link标签引入的css 文件会触发浏览器的预加载(html 加载的时候预扫描,js+css提前开始下载)

三、补充:导致重排的操作

  1. 改变窗口/文字的大小/改变元素的内外边距
  2. 添加 删除样式表
  3. 内容的改变 输入框输入内容也会
  4. 伪类的激活
  5. 操作class属性/脚本操作dom/js改变css类
  6. 计算offsetWidth和offsetHeight
  7. 设置style属性

转换成样式属性就是:

 1. 大小有关的 width,height,padding,margin,border-width,border,min-height
 2. 布局有关的 display,top,position,float,left,right,bottom
 3. 字体有关的 font-size,text-align,font-weight,font-family,line-height,white-space,vertical-align
 4. 隐藏有关的 overflow,overflow-x,overflow-y