你知道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>
CSS display:none使用注意事项
web页面前台编码时经常用到CSS display:none样式,平常使用时发现有几点特征需要注意
1、如果在样式文件或页面文件代码中直接用CSS display:none对元素进行了隐藏,载入页面后,在没有通过js设置样式使元素显示的前提下,使用js代码会无法正确获得该元素的一些属性,比如offSetTop,offSetLeft等,返回的值会为0,通过js设置style.display来使元素显示后才能正确获得这些值。
2、使用CSS display:none隐藏的元素不会被百度等搜索网站检索,会影响到网站的SEO,某些情况下可以使用left:-100000px来达到同样效果。
3、如果是通过样式文件或<style>css</style>方式来设置元素的CSS display:none样式,用js设置style.display=""并不能使元素显示,可以使用block或inline等值来代替。通过style="CSS display:none"直接在元素上进行的设置不会有这个问题
4、有些情况下可以使用style.visibility来代替style.display,但是要注意的是style.visibility隐藏元素时会保留元素在页面上所占的空间,而style.display隐藏元素且让出所占页面空间。