报错

70 阅读2分钟

标准盒子模型和ie模型

  • 标准盒模型的width/height 不包含padding和border。
  • ie 盒子模型的width/height 包含了padding和border。
  • 设置 box-sizing: border-box;是ie 盒模型。
  • box-sizing: content-box;是默认值,为标准盒模型。
  • 标准盒模型会因为padiing被撑大,如果不想盒子因为padding被撑大就可以设置盒子box-sizing为border-box;

重绘和重排

重绘

重绘是一个元素外观的改变导致浏览器行为(例如改变visibility、outline、background等属性),浏览器会根据元素新的属性呈现新的外观。

重排

重排是DOM元素被js触发某种变化,渲染树需要重新计算。浏览器对DOM树进行重新排列;这便是重排。排列完成之后重新绘制元素则是重绘。

常见的触发重排的操作

  1. DOM元素的几何属性变化
  2. DOM树的结构变化(例如节点的增减、移动)
  3. 获取某些属性(例如offsetTop、offseLeft、offseHeight、offsetWidth、clientWidth、clienHeight等)
  4. 改变元素的一些样式(例如调整浏览器窗口的大小)

两者的区别

  • 重绘不会带来重新布局,并不一定伴随着重排

在实际中,尽量减少重排次数和缩小重排影响范围,有以下几种方法:

  1. 将多次改变样式属性的操作,合成一次操作。
  2. 将需要多次重排的元素,嗯,position属性。设为absolute。或fixed。使其脱离文档流,这样,他的变化就不会影响到其他的元素。
  3. 在内存中多次操作节点。完成后再添加到文档中去。
  4. 如果对一个元素进行复杂的操作,可以将display属性设为none嗯使其隐藏。操作完后再显示。
  5. 在需要经常获取那些引起浏览器重排的属性值时,要缓存到变量。