JAVASCRIPT style 中visibility和display之间的区别


Posted in Javascript onJanuary 22, 2010

当visibility被设置为"hidden"的时候,元素虽然被隐藏了,但它仍然占据它原来所在的位置。
---------------------------------------------------------------
例子:

<script language="JavaScript"> 
function toggleVisibility(me){ 
if (me.style.visibility=="hidden"){ 
me.style.visibility="visible"; 
} 
else { 
me.style.visibility="hidden"; 
} 
} 
</script> 
<div onclick="toggleVisibility(this)" style="position:relative">第一行文本将会触发"hidden"和"visible"属性,注意第二行的变化。</div> 
<div>因为visibility会保留元素的位置,所以虽然第一行看不见了但位置还在,第二行内容不会上下移动。</div>

解释:注意到,当元素被隐藏之后,就不能再接收到其它事件了,所以在第一段代码中,当其被设为"hidden"的时候,就不能再接收响应到事件了,因此也就无法通过鼠标点击第一段文本令其显示出来。
---------------------------------------------------------------
另一方面,display属性就有一点不同了。visibility属性是隐藏元素但保持元素的浮动位置,而display实际上是设置元素的浮动特征。
当display被设置为block(块)时,容器中所有的元素将会被当作一个单独的块,就像<div>元素一样,它会在那个点被放入到页面中。(实际上你可以设置<span>的display:block,使其可以像<div>一样工作。
将display设置为inline,将使其行为和元素inline一样---即使它是普通的块元素如<div>,它也将会被组合成像<span>那样的输出流。
--------------------------------------------------------------
例子:
<script language="JavaScript"> 
function toggleDisplay(me){ 
if (me.style.display=="block"){ 
me.style.display="inline"; 
alert("文本现在是:'inline'."); 
} 
else { 
if (me.style.display=="inline"){ 
me.style.display="none"; 
alert("文本现在是:'none'. 3秒钟后自动重新显示。"); 
window.setTimeout("blueText.style.display='block';",3000,"JavaScript"); 
} 
else { 
me.style.display="block"; 
alert("文本现在是:'block'."); 
} 
} 
} 
</script> 
<div>在<span id="blueText" onclick="toggleDisplay(this)" style="color:blue;position:relative;cursor:hand;">蓝色</span>文字上点击来查看效果.</div>

---------------------------------------------------------------
最后是display被设置:none,这时元素实际上就从页面中被移走,它下面所在的元素就会被自动跟上填。(此时应用display: none;的元素相当于消失,而visibility: hidden;则只表示隐藏,位置还在。)
---------------------------------------------------------------
display 属性分别为block, inline, none 值及使用visibility: hidden;的情况调试示例:
<h1>display 属性分别为block, inline, none 值及使用visibility: hidden;的情况调试</h1> 
<P><SPAN id="oSpan" style="background-color: #CFCFCF;">This is a SPAN</SPAN> in a sentence.</P> 
<P> 
<input type=button value="Inline" onclick="oSpan.style.display='inline'"> 
<input type=button value="Block" onclick="oSpan.style.display='block'"> 
<input type=button value="None" onclick="oSpan.style.display='none'"> 
<input type=button value="Hidden" onclick="oSpan.style.visibility='hidden'"><input type=button value="Visible" onclick="oSpan.style.visibility='visible'"> 
</P> 
<UL> 
<LI>将元素设为 block,会在该元素后换行。</LI> 
<LI>将元素设为 inline,会消除元素换行。</LI> 
<LI>将元素设为 none,隐藏该元素内容。</LI> 
</UL>

《太难了》:
同时,关于display:inline;和float:left;两者的区别可以参看该篇文章:
(display是指显示状态,inline表示内联,特点是紧贴着前一个内联元素,通常默认的内联元素有span,a,em,strong等。而float表示的是浮动,float:left,是针对块级元素的浮动形式,是不同形式的两种状态。)http://www.andymao.com/andy/post/42.html
http://bbs.blueidea.com/thread-2596793-1-1.html
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" /> 
<title>float &inline</title> 
<style> 
*{text-align:center;padding:4px;} 
div,p{text-align:left;} 
span{/*float:right;*/ background:#f5f5f5;border-left:1px #eee solid;border-top:1px #eee solid;border-right:1px #ccc solid;border-bottom:1px #ccc solid;} 
ul#inline li{ display:inline; list-style:none;border-left:1px #ccc solid;width:300px; background:#f5f5f5;/* float:left*/;} 
ul#float li{ float:left;display:inline; list-style:none;border-left:1px #666 solid;width:300px; background:#f5f5f5; } 
</style> 
</head> 
<body> 
<span style="width:300px;">span为内联/inline元素,给他宽度赋值是没有效果的。</span> 
<span style="width:100px; float:right;">span为内联/inline元素,给他宽度赋值100px+float:right;可以看到有了宽度。</span> 
<div> 
<p>这个li被定义为内联/inline,设置宽度没有效果</p> 
<ul id="inline"> 
<li>test</li> 
<li>test</li> 
</ul> 
</div> 
<div> 
<p>这个li被定义为内联/inline+float:left,设置宽度有效果</p> 
<ul id="float"> 
<li>test</li> 
<li>test</li> 
</ul> 
</div> 
</body> 
</html>
Javascript 相关文章推荐
JQuery 文本框使用小结
May 22 Javascript
Jquery 一次处理多个ajax请求的代码
Sep 02 Javascript
JS TextArea字符串长度限制代码集合
Oct 31 Javascript
控制页面按钮在后台执行期间不重复提交的JS方法
Jun 24 Javascript
javaScript中的this示例学习详解及工作原理
Jan 13 Javascript
实例解析JS布尔对象的toString()方法和valueOf()方法
Oct 25 Javascript
JS文件上传神器bootstrap fileinput详解
Jan 28 Javascript
微信小程序 后台https域名绑定和免费的https证书申请详解
Nov 10 Javascript
JavaScript无阻塞加载和defer、async详解
Feb 26 Javascript
three.js 入门案例详解
Jan 23 Javascript
vue车牌号校验和银行校验实战
Jan 23 Javascript
小程序rich-text组件如何改变内部img图片样式的方法
May 22 Javascript
javascript 获取url参数和script标签中获取url参数函数代码
Jan 22 #Javascript
JavaScript 学习笔记(十三)Dom创建表格
Jan 21 #Javascript
JavaScript 学习笔记(十二) dom
Jan 21 #Javascript
javascript parseInt与Number函数的区别
Jan 21 #Javascript
js parsefloat parseint 转换函数
Jan 21 #Javascript
jquery 防止表单重复提交代码
Jan 21 #Javascript
javascript 哈希表(hashtable)的简单实现
Jan 20 #Javascript
You might like
改造一台复古桌面收音机
2021/03/02 无线电
php 深入理解strtotime函数的使用详解
2013/05/23 PHP
jquery判断元素的子元素是否存在的示例代码
2014/02/04 Javascript
详解JavaScript中的every()方法
2015/06/08 Javascript
基于Bootstrap仿淘宝分页控件实现代码
2016/11/07 Javascript
JavaScript面向对象精要(下部)
2017/09/12 Javascript
vue-baidu-map 进入页面自动定位的解决方案(推荐)
2018/04/28 Javascript
node.js实现带进度条的多文件上传
2020/03/27 Javascript
Vue实现滑动拼图验证码功能
2019/09/15 Javascript
JS实现简单随机3D骰子
2019/10/24 Javascript
JQuery中的常用事件、对象属性与使用方法分析
2019/12/23 jQuery
[47:04]LGD vs infamous Supermajor小组赛D组 BO3 第二场 6.3
2018/06/04 DOTA
python二叉树遍历的实现方法
2013/11/21 Python
利用Python的Twisted框架实现webshell密码扫描器的教程
2015/04/16 Python
python中找出numpy array数组的最值及其索引方法
2018/04/17 Python
Python中的函数式编程:不可变的数据结构
2018/10/08 Python
利用Python将文本中的中英文分离方法
2018/10/31 Python
Django分页功能的实现代码详解
2019/07/29 Python
face++与python实现人脸识别签到(考勤)功能
2019/08/28 Python
pycharm如何实现跨目录调用文件
2020/02/28 Python
python用opencv完成图像分割并进行目标物的提取
2020/05/25 Python
python中操作文件的模块的方法总结
2021/02/04 Python
俄罗斯眼镜网: optikaworld
2016/07/31 全球购物
澳大利亚婴儿礼品公司:The Baby Gift Company
2018/11/04 全球购物
运动会入场词60字
2014/02/15 职场文书
中级会计职业生涯规划书
2014/03/01 职场文书
中专生自荐信
2014/06/25 职场文书
八项规定自查自纠报告及整改措施
2014/10/26 职场文书
2015年圣诞节活动总结
2015/03/24 职场文书
婚育证明样本
2015/06/16 职场文书
结婚典礼主持词
2015/06/29 职场文书
2019学子的答谢词范本!
2019/07/05 职场文书
golang协程池模拟实现群发邮件功能
2021/05/02 Golang
关于PostgreSQL JSONB的匹配和交集问题
2021/09/14 PostgreSQL
Win11 S Mode版本泄露 正式上线后叫做Windows 11 SE
2021/11/21 数码科技
《帝国时代4》赛季预告 新增内容编译器可创造地图
2022/04/03 其他游戏