关于display:none ,visibility:hidden的关系和区别

984 阅读1分钟

相同点

可以使得相应的元素消失(其实在整个dom树中,相对应的元素并没有真正的消失)

可以通过动态控制来使得元素恢复

不同点

visibility:hidden 的元素会占据相应的空间位置,而display:none 不会。

实例

html

<!DOCTYPE html>
<html lang="en">
 <head>
   <meta charset="UTF-8" />
   <meta name="viewport" content="width=device-width, initial-scale=1.0" />
   <meta http-equiv="X-UA-Compatible" content="ie=edge" />
   <title>Document</title>
   <style>
     body {
       width: 100%;
       height: 100%;
     }
     div {
       width: 100px;
       height: 50px;
       margin: 0 auto;
     }
   </style>
   <script>
       setInterval(() => {
           document.querySelector('div').style.display='block'
           document.querySelectorAll('div')[1].style.visibility='visible'
       }, 3000);
    
   </script>
 </head>

 <body>
    <div class="div1" style="background-color: aqua;display: none;"></div>
    <div class="div2" style="background-color: pink;visibility: hidden;"></div>
    <div class="div3" style="background-color: red;"></div>
 </body>
</html>

在开始时,只有div3显示出来了,但是上面还有一个div2的空间,虽然div2消失。

div1是没有占据任何空间

image.png

上面三个div其实都是存在于dom树结构中的,并没有消失。可以通过控制元素样式来再次让其显示。

最后, 三个div又全部都显示出来了。

image.png