display:none和visibility:hidden的差別比較與演示代碼

前言:
在使用css隱藏欄位或物件的時(shí)候,
常常會(huì)使用到display:none和visibility:hidden這兩個(gè)屬性,
但卻很容易分不清楚這兩個(gè)的差別,
或是乾脆同時(shí)使用兩種屬性,來(lái)確保物件一定被隱藏,
其實(shí)我們可以很簡(jiǎn)單的來(lái)區(qū)分兩者的差別。
AD:
你知道CSS display:none和visibility:hidden的區(qū)別嗎,這里和大家分享一下,使用CSS display:none屬性后,HTML元素(對(duì)象)的寬度、高度等各種屬性值都將“丟失”;而使用visibility:hidden屬性后,HTML元素(對(duì)象)僅僅是在視覺(jué)上看不見(jiàn)(完全透明),而它所占據(jù)的空間位置仍然存在。
CSS display:none和visibility:hidden的區(qū)別
visibility:hidden隱藏,但在瀏覽時(shí)保留位置;CSS display:none視為不存在,且不加載!
Overflow屬性值{visible|hidden|scroll|auto}前提是先要限制DIV的寬度(width)和高度(height)。二者都是隱藏HTML元素,在視覺(jué)效果上沒(méi)有區(qū)別,但在一些DOM操作中二者還是有所不同的。
CSS display:none;
使用該屬性后,HTML元素(對(duì)象)的寬度、高度等各種屬性值都將“丟失”;
visibility:hidden;
使用該屬性后,HTML元素(對(duì)象)僅僅是在視覺(jué)上看不見(jiàn)(完全透明),而它所占據(jù)的空間位置仍然存在,也即是說(shuō)它仍具有高度、寬度等屬性值。
具體區(qū)別請(qǐng)看演示代碼吧:
<!DOCTYPEhtmlPUBLIC"-//W3C//DTDXHTML1.0Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<htmlxmlnshtmlxmlns="http://www.w3.org/1999/xhtml"lang="gb2312">
<head>
<head>
<title>實(shí)例演示:CSS display:none和visible:hidden的區(qū)別</title>
<metahttp-equivmetahttp-equiv="content-type"content="text/html;charset=gb2312"/>
<metahttp-equivmetahttp-equiv="content-type"content="text/html;charset=gb2312"/>
<metanamemetaname="author"content="楓巖,CnLei.y.l@gmail.com">
<metanamemetaname="copyright"content="http://www.cnlei.com"/>
</head>
<body>
<p><ahrefahref="javascript:alert($('CnLei_1').innerHTML+'的寬度:\n'
+GetXYWH($('CnLei_1')).W);">點(diǎn)擊這里CSS display:none;</a></p>
<p><ahrefahref="javascript:alert($('CnLei_2').innerHTML+'的寬度:\n'
+GetXYWH($('CnLei_2')).W);">點(diǎn)擊這里visibility:hidden;</a></p>
<dividdivid="CnLei_1"style="CSS display:none;">CnLei_1</div>
<dividdivid="CnLei_2"style="visibility:hidden;">CnLei_2</div>
<scripttypescripttype="text/javascript">
varw3c=(document.getElementById)?true:false;
varagt=navigator.userAgent.toLowerCase();
varie=((agt.indexOf("msie")!=-1)
&&(agt.indexOf("opera")==-1)&&(agt.indexOf("omniweb")==-1));
varie5=(w3c&&ie)?true:false;
varns6=(w3c&&(navigator.appName=="Netscape"))?true:false;
function$(o){
returndocument.getElementById(o)?document.getElementById(o):o;
}
functionGetXYWH(o){
varo=$(o);
varnLt=0;
varnTop=0;
varoffsetParent=o;
while(offsetParent!=null&&offsetParent!=document.body){
nLt+=offsetParent.offsetLeft;
nTop+=offsetParent.offsetTop;
if(!ns6){
parseInt(offsetParent.currentStyle.borderLeftWidth)>0?
nLt+=parseInt(offsetParent.currentStyle.borderLeftWidth):"";
parseInt(offsetParent.currentStyle.borderTopWidth)>0?
nTop+=parseInt(offsetParent.currentStyle.borderTopWidth):"";
}
offsetParentoffsetParent=offsetParent.offsetParent;
}
return{X:nLt,Y:nTop,W:o.offsetWidth,H:o.offsetHeight};
}
</script>
</body>
</html>
實(shí)際演練
首先,我們先拉出一個(gè)Table如下,
<table id="table1">
<tr>
<td>1
</td>
<td>2
</td>
</tr>
<tr>
<td>3
</td>
<td>4
</td>
</tr>
</table>
執(zhí)行后看起來(lái)會(huì)像這樣子

首先我們替第二行的 tr 加上 style="visibility:hidden"
<tr style="visibility:hidden">
可以發(fā)現(xiàn)我們的Table會(huì)變成這樣

所以當(dāng)使用 visibility:hidden 時(shí),
物件是確實(shí)的被隱藏的,但物件的位置仍舊保持著不會(huì)消失
再來(lái)我們將第二行的tr改成 style="display:none"
<tr style="display:none">
我們的Table會(huì)變成

可以看到第二行連空白也消失了,
所以當(dāng)使用 style="display:none" 時(shí),
物件連原本所在的位置都一起被隱藏了
總結(jié):
若我們需要把一個(gè)物件完全的隱藏,
那我們應(yīng)該要使用 display:none ,
它可以將物件連同所在位置一起隱藏,
就好像真的在網(wǎng)頁(yè)上完全消失了,
而實(shí)際上JQuery的hide及show也是在透過(guò)操作display屬性來(lái)實(shí)現(xiàn)的,
所以當(dāng)需要在網(wǎng)頁(yè)上預(yù)設(shè)某些物件是隱藏時(shí),
不需要透過(guò)jquery一個(gè)一個(gè)的去寫(xiě)
相關(guān)文章
IE/火狐/Chrome操作display:none對(duì)象所遇問(wèn)題解答
display:none在IE、火狐、Chrome等主流瀏覽器中的一些問(wèn)題想必大家也有碰到過(guò)吧,接下來(lái)為大家詳細(xì)圖文介紹下,感興趣的朋友可以參考下哈希望可以幫助到你2013-03-28css元素隱藏原理及display:none和visibility:hidden
在CSS中,讓元素隱藏指屏幕范圍內(nèi)肉眼不可見(jiàn)的方法很多,只不過(guò)有的依然保留空間,而有的卻消失的不留痕跡,接下來(lái)本文將詳細(xì)介紹下css元素隱藏原理,感興趣的你可不要錯(cuò)過(guò)2013-02-27ie9崩潰現(xiàn)象當(dāng)js設(shè)置tr元素樣式為display:none
在css測(cè)試中遇到一個(gè)ie9的bug:用js設(shè)置tr元素的樣式為display:none 會(huì)引起ie崩潰,很是郁悶,于是網(wǎng)上搜羅一下終于找到了解決方法,曬出來(lái)與大家分享,感興趣的你可不要錯(cuò)2013-02-20IE7下父元素及子元素的隱藏順序不當(dāng)帶來(lái)的display:none出現(xiàn)BUG
IE7下,先隱藏父元素,后隱藏子元素,再顯示父元素,被隱藏的子元素重疊區(qū)域下面, 存在另一個(gè)可見(jiàn)的元素,則該display:none的子元素出現(xiàn)BUG;接下來(lái)介紹一下發(fā)生經(jīng)過(guò),感興2013-01-19如何通過(guò) display:olck/none 完成一個(gè)菜單欄
這篇文章主要介紹了如何通過(guò) display:olck/none 完成一個(gè)菜單欄,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-02-18