visibility:hidden會保留元素的空間,僅為視覺上的完全透明(看不見、摸得着)
display:none不為被隱藏的對象保留其物理空間(看不見摸不着)
何為重繪(repaint)
repaint發生的時候,元素的外觀會被改變,且在沒有改變布局的情況下發生,如改變:
outline、visibility、backgroundcolor
不會影響到dom結構的變化,此時只發生repaint
何為渲染(reflow)
峪repaint的區別在於他會影響到dom結構的渲染,同時會觸發repaint,會改變本子和所有父輩元素(祖先),這種開銷很昂貴,會導致性能下降,而且頁面元素越多,效果約明顯。
在這里,display:none會發生reflow;而visibility:hidden只會觸發repaint。