jq之display:none与visible:hidden

http://www.cnblogs.com/linxiong945/p/4075146.html

 今天学习到jquery的hide()部分时,突然有一个想法,jquery中的隐藏/显示部分的实现是给目标元素附加一个"display: none"属性,那么如果在类似于下面的布局中运用,会发生什么情况?



  先把布局的代码贴上来

 1 <!DOCTYPE html>
 2 <html>
 3     <head>
 4         <meta http-equiv="content-type" content="text/html; charset=utf-8" />
 5         <script src="jquery.js"></script>
 6         <style type="text/css">
 7             * {
 8                 margin: 0;
 9                 padding: 0;
10             }
11             .box {
12                 width: 300px;
13                 height: 150px;
14                 text-Align: center;
15                 border: 2px solid;
16                 margin: 100px auto 0 auto;
17             }
18             .box .content {
19                 width: 100%;
20                 height: 100px;
21                 line-height: 100px;
22                 background: #666;
23             }
24             .box .click {
25                 background: #ccc;
26                 width: 300px;
27                 padding: 15px 0;
28             }
29         </style>
30         <title>jquery</title>
31     </head>
32     <body>
33         <div class="box">
34             <div class="content">显示原来的内容</div>
35             <div class="click">
36                 <input id="change" type="button" value="改变文字内容" />
37                 <input id="hide" type="button" value="隐藏/显示" />
38             </div>
39         </div>
40     </body>
41 </html>

  然后给两个按钮绑定上点击事件,第一个改变文字内容,第二个隐藏/显示上面的内容部分。

 1 <script type="text/javascript">
 2     $(function(){
 3       $(‘#change‘).click(function(){
 4          $(‘.content‘).html("显示改变了的内容!");
 5        });
 6        $(‘#hide‘).click(function(){
 7           $(‘.content‘).fadeToggle();
 8        });
 9     });
10 </script>

  代码里的"$(function(){})"部分是"$(‘document‘).ready(function(){})"的简写,这个稍后再论。

  现在点击事件绑定上了,分别点击两个按钮。

  点击改变文字内容按钮:

  

  看起来没有问题!

  再点击显示/隐藏按钮:

  

  按钮条怎么跑上面去了?

  通过浏览器调试查看

  

  可以看到jquery是通过给元素附加了"display: none"而达到效果的。

  上网查了一下,"display:none"的作用是吧某个元素隐藏起来,并且不为被隐藏的对象保留其物理空间,即该对象在页面上彻底消失。这样就造成了下面的按钮块向上浮动了。如何解决这个问题呢?

  我首先想到的是把按钮块给固定在box框的底部,这样不论上面元素块是否存在,都不会影响到下面的按钮块的位置。

  要达到这样的效果,首先得把按钮块从文档流中弹出,使文档流中的元素无法影响到这个元素的位置,浮动"float"和绝对定位"absolute"可以达到目的。

  不过当用浮动实现时,发现点击显示/隐藏按钮,由于内容块忽而显示忽而消失,导致按钮块内的按钮元素也随之移动,显然内容块是否存在对浮动元素的位置是有影响的,这样显然是失败的。

  当使用绝对定位时,通过计算其坐标,倒是达到了效果,不过如果父元素块的布局稍微发生改变,按钮块绝对定位的位置却没有变化(绝对定位基于body),这样显然破坏了该结构的布局,这样的布局是脆弱的,不是我们想要达到的效果。

  显然通过布局来解决这个问题是不现实的。那就从其他方面入手。

  元素的隐藏有两个方法:display:none和visible:hidden。

  两者都可以将元素给隐藏起来,不过有所区别:

  display:none

    不为被隐藏的对象保留其物理空间,即该对象在页面上彻底消失,通俗来说就是看不见也摸不到。

  visible:hidden

    使对象在网页上不可见,但该对象在网页上所占的空间没有改变,通俗来说就是看不见但摸得到。

  这样就找到方法了!将隐藏的实现由"display:none"更改为"visible:hidden"就行了。

  于是js代码更改为:

 1 $(function(){
 2     $("#change").toggle(function(){
 3         $(".content").html("显示改变的内容");
 4         },function(){
 5         $(".content").html("显示原来的内容");
 6     });
 7     $("#hide").toggle(function(){
 8             $(".content").css("visibility","hidden");
 9         },function(){
10         $(".content").css("visibility","visible");
11     });
12 });

  完美解决了问题!



  总结:

    就像脑筋急转弯,有时候换个思路想一想,其实问题很简单。

时间: 2024-08-24 13:44:08

jq之display:none与visible:hidden的相关文章

【javascript】jq之display:none与visible:hidden

今天学习到jquery的hide()部分时,突然有一个想法,jquery中的隐藏/显示部分的实现是给目标元素附加一个"display: none"属性,那么如果在类似于下面的布局中运用,会发生什么情况? 先把布局的代码贴上来 1 <!DOCTYPE html> 2 <html> 3 <head> 4 <meta http-equiv="content-type" content="text/html; charse

display:none与visible:hidden的区别 slideDown与

display:none与visible:hidden的区别 display:none和visible:hidden都能把网页上某个元素隐藏起来,但两者有区别: display:none ---不为被隐藏的对象保留其物理空间,即该对象在页面上彻底消失,通俗来说就是看不见也摸不到. visible:hidden--- 使对象在网页上不可见,但该对象在网页上所占的空间没有改变,通俗来说就是看不见但摸得到. ------------- slideDown() 方法以滑动方式显示被选元素. 注意:sli

display:none与visible:hidden的区别

display:none和visible:hidden都能把网页上某个元素隐藏起来,但两者有区别: display:none ---不为被隐藏的对象保留其物理空间,即该对象在页面上彻底消失,通俗来说就是看不见也摸不到. visible:hidden--- 使对象在网页上不可见,但该对象在网页上所占的空间没有改变,通俗来说就是看不见但摸得到. 例子: <html> <head> <title>display:none和visible:hidden的区别</title

play:none与visible:hidden的区别

display:none和visible:hidden都能把网页上某个元素隐藏起来,但两者有区别: display:none ---不为被隐藏的对象保留其物理空间,即该对象在页面上彻底消失,通俗来说就是看不见也摸不到. visible:hidden--- 使对象在网页上不可见,但该对象在网页上所占的空间没有改变,通俗来说就是看不见但摸得到. 例子: <html> <head> <title>display:none和visible:hidden的区别</title

display:none和visibility:hidden的区别[]

display:none和visibility:hidden都是把网页上某个元素隐藏起来的功能,但两者有所区别,我发现使用 visibility:hidden属性会使对象不可见,但该对象在网页所占的空间没有改变(看不见但摸得到),等于留出了一块空白区域,而 display:none属性会使这个对象彻底消失(看不见也摸不到).”这样的解释.但是我觉得并不够,所以就想了一下关于他的一个加载问题.有属性display:none;的结构在加载页面时,是否会同时加载呢?或则是当他变成display:blo

display:none;与visibility:hidden;的区别

如果想让某一段代码在前台不显示,最简单的方法是用css的display:none即可,这样下边的内容就自动上移或右侧的左移来填补这个空隙.但特殊情况下我们只需要隐藏这个元素, 但它的位置不能被占了,那该怎么实现呢?接下来我们来看css的另外一个属性Visibility属性. visibility:隐藏对应的元素但不挤占该元素原来的空间.display:隐藏对应的元素并且挤占该元素原来的空间. 来看看下面的这个例子: XML/HTML代码 <divstyle="width:100px;hei

css元素隐藏(display:none和visibility:hidden)

在css中, display:none和visibility:hidden都能够使元素隐藏.但是两者所带来的效果完全不同. css  display:none 当使用该样式的时候,HTML元素的宽高等各种属性都将失效,其所占据的空间消失,可将该元素视作完全不存在. css  visibility:hidden 当使用该样式的时候,HTML元素的宽高等各种属性不会失效,其所占据的空间也会被完全保留下来,可将该元素视作完全透明. *当然当某HTML元素具有样式display: none;visibi

display:none与visibility:hidden的区别

visibility(透明度):隐藏对应的元素单不挤占该元素元来的空间. display(展示):隐藏对应的元素并且挤占该元素元来的空间. 通俗点来说 display:none的话会让某一段代码不在前台显示,但是下边的弄容就自动上移或者右移来填补这个空隙,对象不占任何空间. visibility:hidden只是让元素透明度调低被覆盖了而已,所以我们看不到,就被隐藏了起来.但是元素本身是存在的所以会占据元来空间.感觉这个和index属性有点像. 以下内容  写于2017年5月23日   来源于C

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

原文链接:http://www.jb51.net/web/73987.html 在CSS中,让元素隐藏指屏幕范围内肉眼不可见的方法很多,只不过有的依然保留空间,而有的却消失的不留痕迹,接下来本文将详细介绍下css元素隐藏原理,感兴趣的你可不要错过了哈 一.CSS元素隐藏 在CSS中,让元素隐藏(指屏幕范围内肉眼不可见)的方法很多,有的占据空间,有的不占据空间:有的可以响应点击,有的不能响应点击.一个一个看. 复制代码 代码如下: { display: none; /* 不占据空间,无法点击 */