`

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
分享到:
评论

相关推荐

    javascript获取隐藏元素(display:none)的高度和宽度的方法

    为了获取display:none元素的尺寸,一个常见的方法是临时将该元素的display属性更改为visibility:hidden,从而使其获得尺寸信息,再通过计算其样式来获得高度和宽度。但是,这会导致元素暂时变为可见,可能会在页面上...

    visiblity:hidden和display:none的差异

    `visibility:hidden` 和 `display:none` 的主要区别在于,前者隐藏元素的同时保留其占据的空间,而后者则完全从布局中移除元素。这种差异在处理页面布局时尤为关键。例如,如果一个元素的 `display` 被设置为 `none`...

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

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

    javascript获取隐藏元素(display-none)的高度和宽度的方法.docx

    ### JavaScript 获取隐藏元素 (display: none) 的高度和宽度的方法 #### 一、问题背景与需求分析 在前端开发过程中,经常会遇到需要获取隐藏元素尺寸的情况。这些元素可能因为某些逻辑原因被设置为 `display: none...

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

    在CSS中,隐藏元素的方法主要有三种:`display:none`、`visibility:hidden`和`opacity:0`,它们各自有不同的特点和适用场景。 1. `display:none`:此属性会使元素完全从页面布局中消失,不占据任何空间。元素及其...

    css display:none使用注意事项小结

    在Web页面前台编码过程中,CSS属性display: none经常被用来隐藏页面上的元素,以便于构建动态交互效果或是实现页面布局调整。但这个属性的使用需要特别注意几个关键点,以确保不会影响页面的交互性、可访问性以及...

    实例详解display:none与visible:hidden的区别

    其中,`display:none` 和 `visibility:hidden` 是两个常用的属性,它们都可以用来隐藏页面上的元素,但它们的工作原理和效果是不同的。下面将详细解释这两个属性的区别,并通过实例进行演示。 1. `display:none` `...

    对比: display, visibility(有代码)

    在网页设计和开发中,`display` 和 `visibility` 是两个非常重要的CSS属性,它们用于控制元素在页面上的可见性和布局。这篇博客文章通过代码示例深入探讨了这两个属性的区别和用法。 首先,`display` 属性主要用于...

    CSS:Visibility 和 Display 属性的比较.pdf

    总之,`visibility`和`display`在CSS中扮演着不同的角色,`visibility`关注的是元素的可见状态,而`display`则涉及元素在布局中的存在状态。了解它们的差异并合理运用,可以帮助我们更好地控制网页的显示效果和用户...

    css中display和visibility的用法和区别介绍

    在CSS中,`display`和`visibility`两个属性都是用于控制元素在页面上的显示状态,但它们的作用方式和效果有着显著的区别。 `display`属性主要影响元素的布局和类型。它有多种不同的值: 1. `block`:将元素转换为...

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

    在CSS中,隐藏元素主要有两种方法:`display: none` 和 `visibility: hidden`,它们在隐藏元素的同时,对页面布局和交互性有着不同的影响。此外,还有一些其他的技术,如设置`height: 0`结合`overflow: hidden`或者...

    CSS:Visibility和Display属性的比较.pdf

    总的来说,`visibility`和`display`都是CSS中强大的工具,用于控制元素的可见性和布局。理解它们的区别并正确使用,可以让你在创建网页时更加灵活,同时也能避免可能对SEO产生的负面影响。在实际工作中,开发者应...

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

    在jQuery中,`:hidden`选择器用于匹配那些当前不可见的元素,这些元素通常具有`display: none;`的CSS属性。比如在表格中,如果某一行(`<tr>`标签)被设置为隐藏,那么这一行就会被`:hidden`选择器选中。 实例代码...

    IE/火狐/Chrome操作display:none对象所遇问题解答

    例如,如果需要确保隐藏的表单元素在提交时能包含其值,那么可能需要考虑使用其他隐藏机制,如将元素从文档流中移除(使用`visibility: hidden;`或通过绝对定位脱离文档流),或者在表单提交之前将隐藏的元素重新设...

    HTML之CSS 布局 - display 属性

    隐藏元素的选择:`display: none` vs `visibility: hidden`** 在隐藏元素时,应根据需求选择合适的方法。如果希望元素完全消失,包括不影响布局,应使用`display: none`;如果只是暂时隐藏元素,但保持其在布局中的...

    前端大厂最新面试题-hide_attributes.docx

    在 CSS 中隐藏页面元素有多种方式,包括"display:none"、"visibility:hidden"、"opacity:0"、"设置height、width模型属性为0"、"position:absolute"和"clip-path"等方法。每种方法都有其特点和应用场景。 1. ...

Global site tag (gtag.js) - Google Analytics