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

百科知道 網站建設1 4,188閱讀模式

前言:?

在使用css隱藏欄位或物件的時候,
常常會使用到display:none和visibility:hidden這兩個屬性,
但卻很容易分不清楚這兩個的差別,
或是乾脆同時使用兩種屬性,來確保物件一定被隱藏,
其實我們可以很簡單的來區分兩者的差別。

AD:
你知道CSS display:none和visibility:hidden的區別嗎,這里和大家分享一下,使用CSS display:none屬性后,HTML元素(對象)的寬度、高度等各種屬性值都將“丟失”;而使用visibility:hidden屬性后,HTML元素(對象)僅僅是在視覺上看不見(完全透明),而它所占據的空間位置仍然存在。
CSS display:none和visibility:hidden的區別
visibility:hidden隱藏,但在瀏覽時保留位置;CSS display:none視為不存在,且不加載!
Overflow屬性值{visible|hidden|scroll|auto}前提是先要限制DIV的寬度(width)和高度(height)。二者都是隱藏HTML元素,在視覺效果上沒有區別,但在一些DOM操作中二者還是有所不同的。
CSS display:none;
使用該屬性后,HTML元素(對象)的寬度、高度等各種屬性值都將“丟失”;
visibility:hidden;
使用該屬性后,HTML元素(對象)僅僅是在視覺上看不見(完全透明),而它所占據的空間位置仍然存在,也即是說它仍具有高度、寬度等屬性值。
具體區別請看演示代碼吧:


 

<!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>實例演示:CSS display:none和visible:hidden的區別</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);">點擊這里CSS display:none;</a></p>
<p><ahrefahref="javascript:alert($('CnLei_2').innerHTML+'的寬度:\n'
+GetXYWH($('CnLei_2')).W);">點擊這里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>


 

實際演練?
首先,我們先拉出一個Table如下,

<table id="table1">
<tr>
<td>1
</td>
<td>2
</td>
</tr>
<tr>
<td>3
</td>
<td>4
</td>
</tr>
</table>

物件是確實的被隱藏的,但物件的位置仍舊保持著不會消失
再來我們將第二行的tr改成 style="display:none"

所以當使用 style="display:none" 時,
物件連原本所在的位置都一起被隱藏了

總結:
若我們需要把一個物件完全的隱藏,
那我們應該要使用 display:none ,
它可以將物件連同所在位置一起隱藏,
就好像真的在網頁上完全消失了,
而實際上JQuery的hide及show也是在透過操作display屬性來實現的,
所以當需要在網頁上預設某些物件是隱藏時,
不需要透過jquery一個一個的去寫

 

 
  • 本文由 米粒在線 發表于 2013年2月22日12:57:36
  • 轉載請務必保留本文鏈接:http://m.bjmhhq.com/3854.html
    • InBi 1

      你是做前端設計的吧, 都是寫html\css\js

    發表評論

    匿名網友
    :?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:
    確定

    拖動滑塊以完成驗證