CSS隐藏元素的几个方法(display,visibility)的区别

在CSS中,让元素隐藏(指屏幕范围内肉眼不可见)的方法很多,有的占据空间,有的不占据空间;有的可以响应点击,有的不能响应点击。

{ display: none; /* 不占据空间,无法点击 */ }
{ visibility: hidden; /* 占据空间,无法点击 */ }
{ position: absolute; top: -999em; /* 不占据空间,无法点击 */ }
{ position: relative; top: -999em; /* 占据空间,无法点击 */ }
{ position: absolute; visibility: hidden; /* 不占据空间,无法点击 */ }
{ height: 0; overflow: hidden; /* 不占据空间,无法点击 */ }
{ opacity: 0; filter:Alpha(opacity=0); /* 占据空间,可以点击 */ }
{ position: absolute; opacity: 0; filter:Alpha(opacity=0); /* 不占据空间,可以点击 */ }
{
    zoom: 0.001;
    -moz-transform: scale(0);
    -webkit-transform: scale(0);
    -o-transform: scale(0);
    transform: scale(0);
    /* IE6/IE7/IE9不占据空间,IE8/FireFox/Chrome/Opera占据空间。都无法点击 */
}
{
    position: absolute;
    zoom: 0.001;
    -moz-transform: scale(0);
    -webkit-transform: scale(0);
    -o-transform: scale(0);
    transform: scale(0);
    /* 不占据空间,无法点击 */
}

display:none和visibility:hidden的区别

不同有三点:

  1. 空间占据
  2. 回流与渲染
  3. 株连性

第一点,想必都知道;

第二点,display:none隐藏产生reflow和repaint(回流与重绘),而visibility:hidden没有这个影响前端性能的问题;

第三点估计是不少同行不知道的,就是“株连性”方面的差异。

所谓“株连性”,就是如果祖先元素遭遇某祸害,则其子子孙孙无一例外也要遭殃。我顿时想起了《地球反击战》或是《木乃伊之蝎子王》,一旦把母体搞跛了,小辈啊、下属啊什么的都瞬间烟消云散。display:none就是“株连性”明显的声明:一旦父节点元素应用了display:none,父节点及其子孙节点元素全部不可见,而且无论其子孙元素如何不屈地挣扎都无济于事。

在实际的web应用中,我们要经常实现一些显示隐藏的功能,由于display:none本身特性以及jQuery潜在的驱动,使得我们对display:none这种隐藏特性相当熟知。因此,久而久之会形成比较牢固的情感化认识,并无法避免地将这种认识迁移到其他类似表现属性(eg. visibility)的认识上,再加上一些常规经验……

举例来说吧,通常情况下,我们给一个父元素应用visibility:hidden,则其子孙后代也都会全部不可见。于是,我们就会有类似的认识迁移:应用了visibility:hidden声明下的子孙元素如何不屈地挣扎都摆脱不了不可见被抹杀的命运。而实际上却存在隐藏“失效”的情况。

何时隐藏“失效”?很简单,如果子孙元素应用了visibility:visible,那么这个子孙元素又会刘谦般地显现出来。

对比总结:

display:none是个相当惨无人道的声明,子孙后代全部搞死(株连性),而且连块安葬的地方都不留(不留空间),导致全体民众哗然(渲染与回流)。

visibility:hidden则具有人道主义关怀,虽然不得已搞死子孙,但是子孙可以通过一定手段避免(伪株连性),而且死后全尸,墓地俱全(占据空间),国内民众比较淡然(无渲染与回流)。

height:0和overflow:hidden的组合

overflow:hidden用中文理解就是“溢出隐藏”,也就是盒子以外的内容都咔嚓掉不可见的。加上height:0,只要是一般的非inline水平元素,则元素内部所有子孙都应该是不可见的。

height:0overflow:hidden组合隐藏“失效”的条件如下:祖先元素没有position:relative/absolute/fixed声明,同时内部子元素应用了position:absolute/fixed声明。

时间: 2024-10-11 22:49:36

CSS隐藏元素的几个方法(display,visibility)的区别的相关文章

CSS 隐藏元素的八种方法

前言 总括: 本文详细讲述了在网页中用CSS隐藏元素的七种方法. 原文博客地址:从隐藏元素谈起 知乎专栏&&简书专题:前端进击者(知乎)&&前端进击者(简书) 博主博客地址:Damonare的个人博客 念念不忘,必有回响;有一口气,点一盏灯. 正文 说起隐藏元素我想每一个前端er都能说起几种,但能说全的我想就不是很多了.博主总结了几种隐藏元素的方法,总结如下: 1 div{ 2 3 overflow:hidden 4 opacity:0: 5 visibility:hidd

CSS“隐藏”元素的几种方法的对比

一说起CSS隐藏元素,我想大部分小伙伴们都会想到的第一种方法就是设置display为none.这是最为人所熟知也是最常用的方法.我相信还有不少人想到使用设置visibility为hidden来隐藏元素,这种方式也是常用的方法,而且也有很多人知道两者的不同.除了这两种方法,本文还总结了一些比较不常用的方法,比较了这几种“隐藏”元素方法的区别和优缺点,欢迎大家交流!! 几种方法的简单介绍 首先我们分别来说说到底有哪几种隐藏元素的方法,有一些方法是众所周知的,还有一些算是一种技巧. display:n

CSS隐藏元素的几种方法

使用CSS隐藏元素的方法很多,在这里简单总结一下: 1.display:none display:none 应该是最常用的一种隐藏元素的方法,使用该方法隐藏的元素脱离文档流不占据空间,不会被浏览器解析,不能点击,搜索引擎可能会认为被隐藏的文字属于垃圾信息而被忽略,而且屏幕阅读器(是为视觉上有障碍的人设计的读取屏幕内容的程序)会忽略被隐藏的文字. 2.visibility:hidden 使用 visibility:hidden 隐藏的元素,不能点击,但是会占据文档空间,不够灵活,一般配合 posi

CSS隐藏元素的五种方法

1.opacity:0 2.visibility:hidden 3.diaplay:none 4.position:absolute display display属性依照词义真正隐藏元素.将display属性设为none确保元素不可见并且连盒模型也不生成.使用这个属性,被隐藏的元素不占据任何空间.不仅如此,一旦display设为none任何对该元素直接打用户交互操作都不可能生效.此外,读屏软件也不会读到元素的内容.这种方式产生的效果就像元素完全不存在. 任何这个元素的子孙元素也会被同时隐藏.为

js获取隐藏元素宽高的方法

网上有一些js获取隐藏元素宽高的方法,但是可能会存在某些情况获取不了. 例如: <!DOCTYPE html> <html lang="en"> <head> <meta http-equiv="Content-Type" content="text/html;charset=UTF-8" /> <title>test</title> </head> <bo

css隐藏元素的方法何区别

前言 用 CSS 隐藏页面元素有许多种方法.你可以将 opacity 设为 0.将 visibility 设为 hidden.将 display 设为 none 或者将 position 设为 absolute 然后将位置设到不可见区域. 但是每个方法之前是存在着细微的不同,这些不同决定了在一个特定的场合下使用哪一个方法.下面我的这篇文章就给大家解说一下他们之间的区别吧,让大家能根据场合来选择适合的方式. Opacity 该属性的意思是检索或设置对象的不透明度当他的透明度为0的时候,视觉上它是消

css隐藏元素的方法

1. display:none 去除元素位置: 造成回流.重绘: 元素都没有了,自然无法触发时事件了: 2. visibility:hidden 元素存在且大小不变,只是没有渲染: 造成重绘: 元素绑定的事件不会触发了: 3. opacity:0 全透明: 元素存在且大小不变,只是没有渲染: 造成重绘: 元素绑定的事件依然会触发: 4. transorm:scale(0) 缩放缩为最小: 元素存在,大小为0*0: 造成回流.重绘: 5. position:absolute; top:-999em

CSS隐藏元素的方法及区别

1.opacity opacity:0将元素本身及其子元素都置为不可见的,而元素本身依然占据它自己的位置并对网页的布局起作用,它会响应用户交互. 2.visibility visibility:hidden将元素本身及其子元素都置为不可见的,而元素本身依然占据它自己的位置并对网页的布局起作用,它不会响应用户交互.如果想让子元素显示,则设置子元素的visibility:visibility: 3.display display:none使用这个属性,被隐藏的元素对网页的布局不起作用.不仅如此,一旦

用css隐藏页面的5种方法

1.透明度:opacity: hide{opacity:0;} 2.visibility: hide{visibility:hidden}; 3.display:hide{ display:none}4.positon hide{position:aboslute;top:-9999px;left:-9999px}5.clip-path: hide{clip-path:polygon(0px 0px,0px 0px,0px 0px,0px 0px)}