重排的本质修改了布局树,导致重新计算布局,重新绘制。
所有对布局树的更改都会导致重排,以及所有对布局树的读取,都会导致重排。
更改,异步重排,下一次渲染时才会发生。
读取,同步重排,立即发生。
技巧
不是,布局树是DOM树的一个子集,只包含可见元素。
比如:display: none
的元素不在布局树中,或者\<head\>
\<script\>
等不可见元素不在布局树中。
还有,比如说有些元素可能会产生多个布局树节点 \<li\>
, \<table\>
, \<tr\>
, \<td\>
等。
块盒里面是不能直接出现内容的,内容必须要被包裹在行内盒里面,所以块盒里面的内容会被包裹在一个匿名的行内盒里面。
都是针对:可见样式
对所有非几何信息的读取所造成的可见样式的变化,都会导致重绘。
字体类型,大小会导致重排, 因为内容被行内盒包裹,行内盒的大小变化,会导致块盒的大小变化,进而导致重排。
outline
和 border
的本质区别:都是绘制边框,一个是内边框,一个是外边框,但是 outline
不会影响布局,不会导致重排,不在布局树中。