这个视频来说一个有时候前端面试会问到的CSS的面试题,就是让元素隐藏的这几种方式,它们具体的用法和区别。具体去用我相信大家都用过,但是要把这个题回答的很好,把它们之间的区别捋清,不妨来说一下。
这里写了两个div,一个红色、一个蓝色,现在把红色这个给它隐藏掉,上面写的3种方法都可以把它隐藏掉。区别在哪里?
·先来试一下opacity,红色的div确实不见了。
·再来试一下第二种visibility,刷新一下,红色的div也是看不见了,好像和第一种方法没什么区别。
·最后来试一下display,这种方法,红色的div不单止不见了,连蓝色的div它的位置也发生改变了。
先来说一下前面两种,因为前面两种方式,它们表现出来的形式实在太像了。现在用的是opacity,其实是改变了元素的透明度,也就是让它完全透明了,所以才看不到它。但实际上它还是存在的,还是在这里的,只是看不到而已。所以这个方式,它是需要对元素所占的空间的给它排列出来,也就是它还是占的这个空间的。
其次不光是把它所占的空间排列出来,浏览器还需要对元素进行渲染,只不过是把它渲染成透明的,它还是存在的,所以是可以对它进行交互操作的,这一点等一下可以通过js去证明。
接着就是把visibility设置成hidden,这一个的排列方式和刚才设置透明度的是一样的,但是它们有什么区别?这个看得出来,还是需要对它所占的空间进行排列的,它还是占着那个位置的,但是它也仅仅是占着那个空间而已。浏览器已经不对元素进行渲染了,所以空间给你保留,但是元素不存在,就没办法进行交互了。
最后就是display为none,很明显蓝色的div它的位置已经改变了,它占据了原本红色div的位置,也就是红色div原本的那个位置空间已经没有了。其实这种方式,已经不是单纯的把元素给隐藏了,已经是把元素的核模型给修改了,直接就把这个元素给干没了,所以它是既不排列也不渲染。
如果是作为一个面试题来回答,最好还回答到一点,在这三个里面来比较,opacity透明度的这种方式它是最消耗性能的,因为不单止要帮你把位置空出来,还要完完全全的把你给渲染出来,只不过是渲染成透明的,所以它是这三个里面最消耗性能的。
visibility它就是没那么消耗性能,因为这个只是给它保留个位置,保留个空间就可以了,不用对它进行渲染,所以它就没那么消耗性能,display的方式就是完全不消耗性能了。
最后再来看一下用opacity这个元素是不是真的还存在,还可以交互,然后用visibility就已经不可以交互了,这里再把它改成opacity,来写一下js,这里很简单,就给它添加一个点击事件,因为这个元素它还存在,肯定就可以点得到它。
把鼠标移到这个位置,看一下这个元素还存不存在,还可不可以点击得到它,点击一下,发现没有,可以弹出这个OK,证明这个元素它还是存在的,只不过看不到它而已。再把前面给它改一下,改成visibility的方式,再来点这个位置,现在无论我怎么点它都没有反应了,因为这个元素它压根就不存在了,只是空着这个位置在这里而已。
这个视频就到这里,感谢大家的收看。