CSS中有哪些隐藏页面元素的方法?

简介: CSS中有哪些隐藏页面元素的方法?

一、前言

 在我们进行项目开发阶段,肯定会遇到很多需要隐藏元素的需求,并且每次遇到的需求都限制了我们需要特定的方法去隐藏元素。


   如消消乐游戏中,当我们消除成功后,我们就不能使用display:none去隐藏元素。这样会导致后面的元素重新计算元素的位置,使位置发生错乱,这时我们就应该使用 visibility:hidden 来实现该效果。


二、隐藏页面元素的实现方法

1.利用display:none实现

这是我们比较常见的隐藏元素的方法,通过销毁元素,使元素彻底消失,不在占据位置,后面的元素会占据该元素占据的位置,所以一定会触发重排(回流)


具体实现:


未给第一个元素div设置display

<div class="red" style="width: 100px; height: 100px; background: red"></div>
<div class="green" style="width: 100px; height: 100px; background: green"></div>

效果图如下

8ce4f96306f040b19d68da1b266b8847.png

当给第一个元素设置display时,通过给第一个盒子设置display,并且测试给第一个盒子绑定点击事件,是否会触发。

<div id="red" style="display: none; width: 100px; height: 100px; background: red"></div>
<div id="green" style="width: 100px; height: 100px; background: green"></div>
<script>
    let red = document.querySelector('#red');
    red.addEventListener('click', function () {
          console.log('1111');
    });
</script>

20d68a524c2b42dba9cfe6ab9d19492b.png

红色盒子彻底消失,后面的绿色盒子占据了红色盒子的位置,并且自定义事件不会触发


特点:元素不可见,不占据空间,无法响应点击事件


2.利用visibility:hidden隐藏元素

通过给元素设置为不可见达到隐藏元素的效果,元素还存在,只是设置为了不可见,所以只是触发了重绘,并不会触发重排。


当给第一个元素设置visibility:hidden时

<div id="red" style="visibility: hidden; width: 100px; height: 100px; background: red"></div>
<div id="green" style="width: 100px; height: 100px; background: green"></div>
<script>
    let red = document.querySelector('#red');
    red.addEventListener('click', function () {
        console.log('1111');
    });
</script>

效果如下,点击空白处第一个元素位置,不能响应点击事件.


730727267e494f9294246c398e31658d.png


特点:元素不可见,占据页面空间,无法响应点击事件


3.利用opacity:0来隐藏元素

opacity属性:用来设置元素的透明度,它不仅对颜色有效,对图像或者页面中其它的元素也有效。


语法:

opacity:value | inherit
描述
value 规定不透明度,从0.0(完全透明)到 1.0 (完全不透明)
inherit 应该从父元素继承opacity属性的值

通过将元素设置为完全透明(opacity:0)来达到隐藏元素的效果,会占据原有的位置,不一定会引起重绘


当给第一个元素设置opacity:0 时,达到的页面效果和visibility相同,但是通过点击第一个元素,会触发自定义事件。

e289bc7b23724e7a99a66ea7b93d6ff6.png

8450f5c911da41db865c6a5ce645dbff.png


特点:改变元素透明度,元素不可见,占据页面空间,可以响应点击事件


4.设置width,height属性为0隐藏元素

块级元素:块级元素会独占一行(即无法与其他元素显示在同一行内,同时块级元素必须设置宽高,才能正常显示。所以我们通过设置width,height为0可以达到隐藏元素的效果,页面上不显示元素且不占有位置,所以点击事件一定不会生效,且一定会触发重排(改变了元素怒的几何信息大小)


代码示例:

<div id="red" style="background: red; width: 0; height: 0"></div>
<div id="green" style="width: 100px; height: 100px; background: green"></div>

25ba349bce5243e393d197c4d4b8a21b.png

页面效果,只显示绿色盒子,第一个盒子不显示也没有占据位置,且不会出触发点击事件


特点:元素不可见,不占据页面空间,无法响应点击事件


5.利用绝对定位position:隐藏元素

实质上是将元素移除页面,达到隐藏元素的效果


#red {
    position: absolute;
    left: -99999px;
    top: -99999px;
}

三、display:none、visibility:hidden、opacity的区别

     display:none visibility:hidden opacity:0
页面中是否存在  不存在 存在 存在
重排 不会 不会
重绘 不确定
自身绑定事件 不触发 不触发 可触发
transition(动画) 不支持 支持 支持

重排一定会引起重绘,但重绘不一定会引起重排(后面我会对重绘和重排进行详解)


四、小结

    当我们遇到需要隐藏元素的场景时,可以考虑一下最终实现的效果,是否要显示元素,是否需要绑定自定义事件触发事件,是否需要增加动画效果(实现过渡效果),同时还要考虑性能方面的问题(即是否会触发重排或者重绘),都是我们需要考虑的问题。


     以上便是我总结的隐藏元素的方法及特点,欢迎大家讨论,一起学习。


目录
相关文章
|
24天前
|
前端开发 UED 容器
在 CSS 中使用 Flex 布局实现页面自适应时需要注意什么?
【10月更文挑战第22天】在使用 Flex 布局实现页面自适应时,需要对其基本原理和特性有深入的理解,同时结合具体的布局需求和场景,进行细致的调整和优化。通过合理的设置和注意事项的把握,才能实现理想的自适应效果,提升用户体验。还可以根据实际情况进行更深入的探索和实践,以不断提升 Flex 布局的应用能力。
|
8天前
|
前端开发 JavaScript
如何利用 CSS3 动画实现元素的淡入淡出效果?
在上述代码中,定义了一个名为 `fade-in` 的CSS类,其初始透明度为0,并设置了淡入的过渡效果。当通过JavaScript为元素添加 `active` 类时,元素的透明度变为1,实现淡入效果;当再次点击按钮移除 `active` 类时,元素又会逐渐淡出。通过这种方式,可以根据用户的操作灵活地控制元素的淡入淡出效果。
57 3
|
21天前
|
缓存 监控 前端开发
CSS 提高性能的方法
【10月更文挑战第24天】在实际应用中,还需要根据具体项目的特点和需求,灵活选择和组合这些方法,不断进行优化和改进。同时,随着技术的不断发展,也需要持续关注新的性能优化技巧和最佳实践,以保持在性能优化方面的领先地位。你对 CSS 性能优化还有哪些深入的思考和经验呢?欢迎进一步交流和分享。
|
24天前
|
前端开发
css页面顶部底部固定,中间自适应几种方法
【10月更文挑战第22天】css页面顶部底部固定,中间自适应几种方法
|
25天前
CSS_定位_网页布局总结_元素的显示与隐藏
CSS_定位_网页布局总结_元素的显示与隐藏
24 0
|
1月前
|
前端开发 UED
css性能优化的方法
css性能优化的方法
24 0
|
1月前
|
前端开发
css 块元素、行内元素、行内块元素相互转换
css 块元素、行内元素、行内块元素相互转换
96 0
|
前端开发 容器
css:整理9种元素水平垂直居中的方法
css:整理9种元素水平垂直居中的方法
145 0
css:整理9种元素水平垂直居中的方法

热门文章

最新文章