前端基础知识CSS系列 - 04(隐藏页面元素的方式和区别)

一、前言

在平常的样式排版中,我们经常遇到将某个模块隐藏的场景

通过css隐藏元素的方法有很多种,它们看起来实现的效果是一致的

但实际上每一种方法都有一丝轻微的不同,这些不同决定了在一些特定场合下使用哪一种方法

二、实现方式

通过css实现隐藏元素方法有如下:

  • display:none
  • visibility:hidden
  • opacity:0
  • 设置height、width模型属性为0
  • position:absolute
  • clip-path

display:none

设置元素的displaynone是最常用的隐藏元素的方法

复制代码
.hide {
    display:none;
}

将元素设置为display:none后,元素在页面上将彻底消失

元素本身占有的空间就会被其他元素占有,也就是说它会导致浏览器的重排和重绘

消失后,自身绑定的事件不会触发,也不会有过渡效果

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

visibility:hidden

设置元素的visibilityhidden也是一种常用的隐藏元素的方法

从页面上仅仅是隐藏该元素,DOM结果均会存在,只是当时在一个不可见的状态,不会触发重排,但是会触发重绘

复制代码
.hidden{
    visibility:hidden
}

给人的效果是隐藏了,所以他自身的事件不会触发

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

opacity:0

opacity属性表示元素的透明度,将元素的透明度设置为0后,在我们用户眼中,元素也是隐藏的

不会引发重排,一般情况下也会引发重绘

如果利用 animation 动画,对 opacity 做变化(animation会默认触发GPU加速),则只会触发 GPU 层面的 composite,不会触发重绘

复制代码
.transparent {
    opacity:0;
}

由于其仍然是存在于页面上的,所以他自身的的事件仍然是可以触发的,但被他遮挡的元素是不能触发其事件的

需要注意的是:其子元素不能设置opacity来达到显示的效果

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

设置height、width属性为0

将元素的marginborderpaddingheightwidth等影响元素盒模型的属性设置成0,如果元素内有子元素或内容,还应该设置其overflow:hidden来隐藏其子元素

复制代码
.hiddenBox {
    margin:0;     
    border:0;
    padding:0;
    height:0;
    width:0;
    overflow:hidden;
}

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

position:absolute

将元素移出可视区域

复制代码
.hide {
   position: absolute;
   top: -9999px;
   left: -9999px;
}

特点:元素不可见,不影响页面布局

clip-path

通过裁剪的形式

复制代码
.hide {
  clip-path: polygon(0px 0px,0px 0px,0px 0px,0px 0px);
}

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

小结

最常用的还是display:nonevisibility:hidden,其他的方式只能认为是奇招,它们的真正用途并不是用于隐藏元素,所以并不推荐使用它们

三、区别

关于display: nonevisibility: hiddenopacity: 0的区别,如下表所示:

display: none visibility: hidden opacity: 0
页面中 不存在 存在 存在
重排 不会 不会
重绘 不一定
自身绑定事件 不触发 不触发 可触发
transition 不支持 支持 支持
子元素可复原 不能 不能
被遮挡的元素可触发事件 不能
相关推荐
yuanyxh2 小时前
《精通正则表达式》精华摘要
前端·javascript·正则表达式
小飞大王6662 小时前
简单实现HTML在线编辑器
前端·编辑器·html
Jimmy3 小时前
CSS 实现卡牌翻转
前端·css·html
百万蹄蹄向前冲3 小时前
大学期末考,AI定制个性化考试体验
前端·人工智能·面试
向明天乄3 小时前
在 Vue 3 项目中集成高德地图(附 Key 与安全密钥申请全流程)
前端·vue.js·安全
sunshine_程序媛3 小时前
vue3中的watch和watchEffect区别以及demo示例
前端·javascript·vue.js·vue3
电商数据girl4 小时前
【经验分享】浅谈京东商品SKU接口的技术实现原理
java·开发语言·前端·数据库·经验分享·eclipse·json
Senar4 小时前
听《富婆KTV》让我学到个新的API
前端·javascript·浏览器
烛阴5 小时前
提升Web爬虫效率的秘密武器:Puppeteer选择器全攻略
前端·javascript·爬虫
hao_wujing5 小时前
Web 连接和跟踪
服务器·前端·javascript