displaynone和visibilityhidden区别
<body> <div> <strong>给元素设置display:none样式</strong> <p>A元素</p> <p style='display:none;'>B元素</p> <p>C元素</p> </div> </body>
如果给一个元素设置了display: none,那么该元素以及它的所有后代元素都会隐藏,它是前端开发人员使用频率最高的一种隐藏方式。隐藏后的元素无法点击,无法使用屏幕阅读器等辅助设备访问,占据的空间消失。
<body> <div> <strong>给元素设置visibility:hidden样式</strong> <p>A元素</p> <p style='visibility:hidden;'>B元素</p> <p>C元素</p> </div> </body>
给元素设置visibility: hidden也可以隐藏这个元素,但是隐藏元素仍需占用与未隐藏时一样的空间,也就是说虽然元素不可见了,但是仍然会影响页面布局。
display:none会脱离文档流,不占据页面空间;
visibility:hidden,只是隐藏内容,并没有脱离文档流,会占据页面的空间。
1、根据文档生成DOM树(包括display:none的节点)
2、在DOM树基础上根据节点的几何属性(margin/padding/width/height等)生成render树(不包括display:none、head节点但会包含visibility:hidden节点)
3、在render树基础上进行一步渲染包括color,outline等样式
reflow:当render树中的一部分或者全部因为大小边距等问题发生改变而需要重建的过程叫做回流。
repaint:当元素的一部分属性发生变化,如外观背景色不会引起布局变化而需要重新渲染的过程叫做重绘。
所以display:none会引起回流和重绘,visibility:hidden会引起重绘