`

css元素隐藏原理及display:none和visibility:hidden

 
阅读更多

一、CSS元素隐藏 
在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,那么这个子孙元素又会刘谦般地显现出来。


visibility就是这样一个funny的属性。 
对比总结: 
display:none是个相当惨无人道的声明,子孙后代全部搞死(株连性),而且连块安葬的地方都不留(不留空间),导致全体民众哗然(渲染与回流)。 
visibility:hidden则具有人道主义关怀,虽然不得已搞死子孙,但是子孙可以通过一定手段避免(伪株连性),而且死后全尸,墓地俱全(占据空间),国内民众比较淡然(无渲染与回流)。
 

 

  • 大小: 38.7 KB
分享到:
评论

相关推荐

    display:none和visibility:hidden的差别比较与演示代码

    前言: 在使用css隐藏栏位或物件的时候, 常常会使用到display:none和visibility:hidden这两个属性, 但却很容易分不清楚这两个的差别, 或是乾脆同时使用两种属性,来确保物件一定被隐藏, 其实我们可以很简单的来...

    CSS隐藏元素 display visibility opacity的区别.docx

    CSS隐藏元素 display visibility opacity的区别 display:none和visibility:hidden的区别 对比总结: height:0和overflow:hidden的组合

    谈谈CSS隐藏元素(display,visibility)的区别

    复制代码代码如下:{ display: none; /* 不占据空间,无法点击 */ } { visibility: hidden; /* 占据空间,无法点击 */ } { position: absolute; top: -999em; /* 不占据空间,无法点击 */ } { position: relative; ...

    jQuery可见性过滤器:hidden和:visibility用法实例

    匹配所有不可见元素,如果使用css的visibility属性让元素不显示但是占位,则不属于hidden了 查找display:none的tr元素,$(“tr:hidden”) :visible 匹配所有可见元素 查找所有display不为none的元素,$(“tr:visible...

    关于CSS属性中visibility隐藏和display消失的区别简析

    了解Css的人应该都知道display:none;和visibility:hidden;之间的一些区别,当html元素被设置为display:none;后,浏览器不会解析该元素,“none”就是没有,消失了,所以他不会再文档流中占位。而visibility:hidden;...

    interview:面试

    display:none和visibility:hidden的区别 1.visibility:hidden 将元素隐藏,空间不释放 使用后仅仅视觉上看不见 所占据空间仍然存在 2.display:none 将元素显示设为无 空间释放 各种属性丢失 opacity的兼容...

    css 清除浏览器默认样式

    /* reset */ ...padding:0;...visibility:hidden;width:0;height:0;}.container, .clearfix {display:inline-block;}* html .container,* html .clearfix {height:1%;}.container, .clearfix {display:block;}

    新版前端高频面试题笔记+课件+源码(HTML+CSS+JavaScript)

    与visibility: hidden;的区别 2.外边距折叠(collapsing margins) 3.z-index是什么?在position的值什么时候可以触发? …… 三.JS高频面试题 1.介绍JS有哪些内置对象? 2.如何最小化重绘(repaint)和回流(reflow)?3....

    CSS教程:CSS让网页文字自动隐藏

    1、display:none 这种方法搜索引擎可能认为被隐藏的文字属于垃圾信息而被忽略; 屏幕阅读器会忽略被隐藏的文字。 2、visibility: hidden 这种方法隐藏了文字却仍然占据物理空间。 更好的方法: overflow:hidden ....

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

    一说起CSS隐藏元素,我想大部分小伙伴们都会想到的第一种方法就是设置display为none。这是最为人所熟知也是最常用的方法。我相信还有不少人想到使用设置visibility为hidden来隐藏元素,这种方式也是常用的方法,而且...

    css中让元素隐藏的多种方法

    在CSS中,让元素隐藏(指屏幕范围内肉眼不可见)的方法很多,有的占据空间,有的不占据空间;有的可以响应点击,有的不能响应点击。下面一个个列出,选一个适合你的 复制代码代码如下: { display: none; /* 不占据...

    举例讲解jQuery中可见性过滤选择器的使用

    可见性过滤器 可见性过滤器根据元素的可见性和不可见性来选择相应的元素。...注意::hidden 过滤器一般是包含的内容为:CSS 样式为display:none、input 表单类型为type=”hidden”和visibility:hid

    详解css中的display属性

    inlineblockinline-blocknone把 display 设置成 none 不会保留元素本该显示的空间,但是 visibility: hidden 还会保留。 那么,display:inline、display:block和display:inline-block有什么区别呢? 复制代码代码...

    最简洁的CSS清除浮动的方法

    清理浮动有很多种方式,像使用 br 标签自带的 clear 属,使用元素的 overflow,使用空标签来设置 clear:both 等等。...其原理是,在「高级」浏览器中使用 :after 伪类在浮动块后面加上一个非 display:none 的不可见

    css中clearfix清除浮动的用法及其原理示例介绍

    clearfix的定义: 复制代码代码如下: .clearfix:after {}{ content: ...注意它和display:none;是有区别的。visibility:hidden;仍然占据空间,只是看不到而已;*/ line-height: 0; /**//*行高为0;*/ height: 0; /**/

    CSS属性中Display与Visibility区别分析

    visibility属性用来确定元素是显示还是隐藏,这用visibility="visible|hidden"来表示, visible表示显示, hidden表示(仅)隐藏,不可恢复。 当visibility被设置为"hidden"的时候,元素虽然被隐藏了, 1、仍然...

    三星9305收索

    top:3px}#shouji{margin-right:14px}#u{display:none}#c-tips-container{display:none}.bdsug{position:absolute;width:418px;background:#fff;display:none;border:1px solid #817f82}.bdsug li{width:402px;color:...

Global site tag (gtag.js) - Google Analytics