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

先把布局的代码贴上来
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
<script src="jquery.js"></script>
<style type="text/css">
* {
margin: 0;
padding: 0;
}
.box {
width: 300px;
height: 150px;
text-Align: center;
border: 2px solid;
margin: 100px auto 0 auto;
}
.box .content {
width: 100%;
height: 100px;
line-height: 100px;
background: #666;
}
.box .click {
background: #ccc;
width: 300px;
padding: 15px 0;
}
</style>
<title>jquery</title>
</head>
<body>
<div class="box">
<div class="content">显示原来的内容</div>
<div class="click">
<input id="change" type="button" value="改变文字内容" />
<input id="hide" type="button" value="隐藏/显示" />
</div>
</div>
</body>
</html>
然后给两个按钮绑定上点击事件,第一个改变文字内容,第二个隐藏/显示上面的内容部分。
<script type="text/javascript">
$(function(){
$('#change').click(function(){
$('.content').html("显示改变了的内容!");
});
$('#hide').click(function(){
$('.content').fadeToggle();
});
});
</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代码更改为:
$(function(){
$("#change").toggle(function(){
$(".content").html("显示改变的内容");
},function(){
$(".content").html("显示原来的内容");
});
$("#hide").toggle(function(){
$(".content").css("visibility","hidden");
},function(){
$(".content").css("visibility","visible");
});
});
完美解决了问题!
总结:
就像脑筋急转弯,有时候换个思路想一想,其实问题很简单。
【javascript】jq之display:none与visible:hidden的更多相关文章
- jq之display:none与visible:hidden
http://www.cnblogs.com/linxiong945/p/4075146.html 今天学习到jquery的hide()部分时,突然有一个想法,jquery中的隐藏/显示部分的实现是给 ...
- Readonly和disabled的区别 display:none和visible:hidden的区别
怎样使input中的内容为只读,也就是说不让用户更改里面的内容. <input type="text" name="input1" value=" ...
- display:none与visible:hidden的区别 slideDown与
display:none与visible:hidden的区别 display:none和visible:hidden都能把网页上某个元素隐藏起来,但两者有区别: display:none ---不为被 ...
- display:none与visible:hidden的区别
display:none和visible:hidden都能把网页上某个元素隐藏起来,但两者有区别: display:none ---不为被隐藏的对象保留其物理空间,即该对象在页面上彻底消失,通俗来说就 ...
- display:none与visible:hidden区别
if(list.style.display=='none'){ list.style.display='block'; }else{ ...
- display:none和visible:hidden两者的区别
display:none和visible:hidden都能把网页上某个元素隐藏起来,但两者有区别:display:none ---不为被隐藏的对象保留其物理空间,即该对象在页面上彻底消失,通俗来说就是 ...
- CSS中:display:none与visible:hidden的区别
display:none视为不存在且不加载,即,不为被隐藏的对象保留其物理空间,即该对象在页面上彻底消失. visibility:hidden隐藏,但在浏览时保留位置,即,使对象在网页上不可见,但该对 ...
- display:none和visibility:hidden区别
<!-- display:none和visible:hidden都能把网页上某个元素隐藏起来,但两者有区别: --> <!-- display:none 不为被隐藏的对象保留其物理空 ...
- visible:hidden和dispaly:none的区别
display:none和visible:hidden都能把网页上某个元素隐藏起来,但两者有区别: display:none ---不为被隐藏的对象保留其物理空间,即该对象在页面上彻底消失,通俗来说就 ...
随机推荐
- Reporting Service服务SharePoint集成模式安装配置(9、PowerPivot for SharePoint 安装配置详细)
PowerPivot for SharePoint 增加了对发布到 SharePoint 中的 PowerPivot 工作簿的协作和文档管理支持. PowerPivot for SharePoint ...
- xaml mvvm(1)之结构
在微软winstore.wp和silverlight中xaml是用来构建UI视图的标记语言,全名Extensible Application Markup Language.在结构上类似于html,但 ...
- sql获取表的所有字段及属性
select c.name as name,t.name as type ,convert(bit,c.IsNullable) as isNULL , from sysobjects where xt ...
- 数独高阶技巧之八——SDC
在本系列的第四篇“简单异数链”中,向大家介绍了XY-Wing等一系列Wing类技巧,并提到可以用(拐弯的)数组的观念来理解这些结构,经过第六篇ALS的学习之后,大家回过头再去看Wing,应该可以发现相 ...
- 一步一步教你如何制件 ZKEACMS 的扩展组件/插件
前言 如果你还不知道ZKEACMS,不妨先了解一下. ASP.NET MVC 开源建站系统 ZKEACMS 推荐,从此网站“拼”起来 官方地址:http://www.zkea.net/zkeacms ...
- WinForm中的重绘 - 按钮等控件的背景渐变色重绘
注:brush通过起止坐标来控制重绘范围及方向.比如从上到下渐变时,brush第二个Point参数是左下角坐标. private void PaintGradientBackground(Button ...
- ftp服务器PDF文件在线查看
曾做过电厂的项目,有一些功能需要和甲方的厂家对接,其中就有需要实现甲方ftp服务器上的PDF.JPG等文件的查看功能.就PDF文件为例,这里使用的是pdf插件,需要将参数通过链接发给ftp,获取到PD ...
- 初学python - 字典
字符串转为字典 import astline=input()linedict=ast.literal_eval(line) 遍历字典 for key in linedict: value=linedi ...
- “全栈2019”Java第十三章:基本数据类型
难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...
- scrapy框架基于CrawlSpider的全站数据爬取
引入 提问:如果想要通过爬虫程序去爬取”糗百“全站数据新闻数据的话,有几种实现方法? 方法一:基于Scrapy框架中的Spider的递归爬取进行实现(Request模块递归回调parse方法). 方法 ...