导航
浏览器采用流式布局模型(Flow Based Layout)
浏览器会把 HTML 解析成 DOM,把 CSS 解析成 CSSOM,DOM 和 CSSOM 合并就产生了渲染树(Render Tree)。
有了 RenderTree,我们就知道了所有节点的样式,然后计算他们在页面上的大小和位置,最后把节点绘制到页面上。
由于浏览器使用流式布局,对 Render Tree 的计算通常只需要遍历一次就可以完成,但 table 及其内部元素除外,他们可能需要多次计算,通常要花3 倍于同等元素的时间,这也是为什么要避免使用 table 布局的原因之一。
HTML
table 布局,可能很小的一个小改动会造成整个 table 的重新布局。CSS
position 属性为 absolute 或 fixed 的元素上,避免影响其他元素的布局,这样只是一个重绘,而不是回流,同时,控制动画速度可以选择 requestAnimationFrame。calc())。transform: translateZ(0))JS
<body>
  <div id="box">文字内容</div>
  <script>
    var box = document.getElementById("box");
    // box.style.width='100px';
    // box.style.height="100px";
    // box.style.backgroundColor='red';
    box.style.cssText += "width:100px;height:100px;background-color:red";
  </script>
</body>
<style>
.box {
  width: 100px;
  height: 100px;
  background-color: red;
}
</style>
<body>
  <div id="box">文字内容</div>
  <script>
    var box = document.getElementById("box");
    box.className = "box";
  </script>
</body>
<body>
  <div id="box"></div>
  <script>
    var box = document.getElementById("box");
    var fragment = document.createDocumentFragment(); //创建虚拟的节点对象
    for (var i = 0; i < 10; i++) {
      var span = document.createElement("span");
      span.index = i;
      span.style.display = "inline-block";
      span.style.width = "20px";
      span.style.height = "20px";
      span.style.backgroundColor = "red";
      span.innerText = span.index;
      fragment.appendChild(span);
    }
    box.appendChild(fragment);
  </script>
</body>
display: none,操作结束后再把它显示出来。