display:none和visibility:hidden的区别!
时间:2009-08-04
来源:互联网
display:none和visibility:hidden都是把网页上某个元素隐藏起来的功能,但两者有所区别,经过亲自实验,我发现使用 visibility:hidden属性会使对象不可见,但该对象在网页所占的空间没有改变(看不见但摸得到),等于留出了一块空白区域,而 display:none属性会使这个对象彻底消失(看不见也摸不到)。
”这样的解释。
但是我觉得并不够,所以就想了一下关于他的一个加载问题。
有属性display:none;的结构在加载页面时,是否会同时加载呢?或则是当他变成display:block;的时候才加载的呢?
有属性visibility:hidden; 的结构在加载页面时,是否会同时加载呢?或则是当他变成visibility:visible; 的时候才加载的呢?
个人的看法是:
display:;当他的值变成block 的时候,它所在的结构才会被加载进来。
而visibility就会在加载页面的同时就已经把它加载进来了,因为他的值为hidden的时候,它所占的空间还在。
这些观点都是我的一个推测,本人并不知道如何去测试,也找不到这方法的资料,所以到此来跟大家讨论讨论。
还望各位大虾指点迷津。
[ 本帖最后由 kaka48265 于 2009-8-4 13:54 编辑 ]
作者: kaka48265 发布时间: 2009-08-04
至于你的疑虑。我的答案是(仅供参考):不管是用了什么css样式,html里的元素都会在打开网页后一并加载。这个说到底也是css的基本功能。就是结构与表现的分离。我们的html是结构,结构会全部加载,但是在表现的时候(也就是页面的外观),由css来控制你看的到还是看不到而已。
所以你说的:“display:none和visible:hidden都是把网页上某个元素隐藏起来的功能,但两者有所区别,经过亲自实验,我发现使用 visible:hidden属性会使对象不可见,但该对象在网页所占的空间没有改变(看不见但摸得到),等于留出了一块空白区域,而 display:none属性会使这个对象彻底消失(看不见也摸不到)。”
就这样理解即可。
作者: mobaihuo 发布时间: 2009-08-04
我的问题你已经很好的跟我解释了。
不过不知道我们是否能扩展一下。
能否实现一个在点击它显示这个结构的时候他才加载的方法。
如果用一个iframe可否实现呢?
(我们暂且不说他合不合理。)
[ 本帖最后由 kaka48265 于 2009-8-4 12:49 编辑 ]
作者: kaka48265 发布时间: 2009-08-04
代码:
visibility作者: birdstudio 发布时间: 2009-08-04
引用:
原帖由 birdstudio 于 2009-8-4 12:53 发表visibility
我真不懂。
我上面好像有说到visibility 这个属性。
作者: kaka48265 发布时间: 2009-08-04
而如果设定“visibility : hidden”则会生成元素框,只是元素“不可视”,而其他非视觉的属性都将生效,例如widht、padding等。
作者: 豆豆猫 发布时间: 2009-08-04

作者: birdstudio 发布时间: 2009-08-04
谢谢你的解释。
不过并非我们讨论的范围了!

7#
谢谢提醒,已经修改。
希望大家踊跃参与,提出宝贵意见。
如何实现控制它显示的时候它才加载进页面的方法。
作者: kaka48265 发布时间: 2009-08-04
引用:
原帖由 kaka48265 于 2009-8-4 13:58 发表如何实现控制它显示的时候它才加载进页面的方法。
作者: birdstudio 发布时间: 2009-08-04
提示:您可以先修改部分代码再运行
个人的看法是:
display:;当他的值变成block 的时候,它所在的结构才会被加载进来。
而visibility就会在加载页面的同时就已经把它加载进来了,因为他的值为hidden的时候,它所占的空间还在。
你这个说法是不对的,应该都是在页面载入的时候就加载了
可以通过隐藏IFRAME来测试
页面载入的时候请注意看你浏览器的状态栏。
作者: 47tz 发布时间: 2009-08-04
你说visibility:hidden看不见但摸得到?我怎么摸不到呢?用ie和ns都摸不到,只是占用了位置。
作者: pjypjw 发布时间: 2009-08-04
大家可以做一个实验:下面这段代码,先在 #test { display:none;} 的情况下运行,然后断开网络,把display:none改成display:block 运行,结果是图片并没有被显示。在连接上网络,刷新,图片就显示了。
提示:您可以先修改部分代码再运行
作者: kapiter 发布时间: 2009-08-05
显然这是不成立的。
“下面这段代码,先在 #test { display:none;} 的情况下运行(会加载隐藏的内容),然后断开网络(此时内容页还在),把display:none改成display:block 运行(你修改之后运行需要刷新),结果是图片并没有被显示(网络都断开了还能显示个啥呀!)。”
作者: 47tz 发布时间: 2009-08-05
如果加载了,那么浏览器的缓存里面就会有,即使断开了网络,display:block也能显示图片。
你们说的“加载”是什么意思呢?如果说是加载结构的话,那么这种讨论就完全没有意义,浏览器都是下载完整的html代码,而css只是负责表现样式。不管display:none还是display:block 我源代码里总是能看到吧,你们在讨论什么呢?
作者: kapiter 发布时间: 2009-08-05
楼主说“能否实现一个在点击它显示这个结构的时候他才加载的方法。
如果用一个iframe可否实现呢?“
这个要看你的实现目的了,也就是需要ajax,用iframe的作用。
测试display:none的时候,是否图片会加载的方法:
建一个页面,在一个隐藏的div的放一个img。
然后通过yslow的 插件,关注下加载的请求就知道了。
作者: tenero 发布时间: 2009-08-05
显然你断开网络之后路径就变化了,这个时候并不是请求本地机器上的缓存文件。有原则上的区别。
作者: 47tz 发布时间: 2009-08-05
你的例子已经很好的解释了这个东西,在看地址栏的时候我才明白。
它在加载网页的时候已经把那些把隐藏(display:none和visibility:hiddden)的结构都加载进来了。
看来只能用
引用:
传说中的 Ajax ?作者: kaka48265 发布时间: 2009-08-05
引用:
原帖由 47tz 于 2009-8-5 10:17 发表问题是 图片虽然在缓存里,但页面请求的不是缓存里的图片啊。网站上的图片是远程服务器上的,缓存只对远程路径不变的情况下才能起作用。
显然你断开网络之后路径就变化了,这个时候并不是请求本地机器上的缓存文件 ...

作者: kapiter 发布时间: 2009-08-05
# 47tz
两位大虾你们讨论都有点不明白对方的意思。
我来打个太极,说明一下。(可能有所偏差)
# kapiter的意思是:断网的情况下,当你从新运行网页的时候,网页还是会向远程服务器发出请求(例子中说的即是那个图片了),并非请求本地缓存。
# 47tz的意思是:既然我本地缓存已经有了你这个图片,那么在断网的情况下,从新运行网页的时候那么就直接去请求本地缓存了。
如有说错的地方还请指出!

[ 本帖最后由 kaka48265 于 2009-8-5 13:58 编辑 ]
作者: kaka48265 发布时间: 2009-08-05
正是因为断网情况下display:block时,在缓存里面也查找不到图片,才说明了缓存里面没有图片,说明了display:none的时候并没有从网络上下载图片
如果一开始联网的时候display:block,那么图片就会被下载下来,然后再断网display:block,这时候因为缓存里面有图片 所以图片是可以显示的。
这个有那么难理解么

作者: kapiter 发布时间: 2009-08-05
没设置好,你怎么知道浏览器一定读缓存?
作者: dcchan 发布时间: 2009-08-05
b是后来的可以补充上来
可以这么理解吧
作者: singlesoho 发布时间: 2009-08-05
作者: 47tz 发布时间: 2009-08-05

不过:
断开网络后display:block不显示图片 ,正是说明了没断网络之前display:none的时候图片并不加载
这个我觉得还是不能说明问题的。
作者: 47tz 发布时间: 2009-08-05
http://lifesinger.org/blog/2009/05/img-http-request/
作者: birdstudio 发布时间: 2009-08-05
全都下载.
这两个一个占位一个不占位..从字面都能理解咯.none和.hidden的区别
还有需要讨论的吗.散会~
作者: anime 发布时间: 2009-08-05
引用:
原帖由 birdstudio 于 2009-8-5 20:20 发表图片的 http 请求:
http://lifesinger.org/blog/2009/05/img-http-request/
我刚才用科来抓包分析了一下,在display:none的时候确实不会向图片的源地址发出http请求,
改成display:block就可以看到浏览器发出的http请求了

作者: kapiter 发布时间: 2009-08-05
提示:您可以先修改部分代码再运行
作者: okwxj 发布时间: 2009-09-06
作者: qiancaotan 发布时间: 2009-09-06
<img src="1.jpg" style="display: none" />
结论:只有Opera不产生请求。
注意:用visibility: hidden隐藏图片时,在Opera下也会产生请求。
作者: meters 发布时间: 2009-11-13
作者: jws2003 发布时间: 2010-07-26
作者: chuangnzh 发布时间: 2010-09-16
1.display visibility 的应用对象无论值为何,浏览器都会加载生产此对象的dom结构.
2. visibility:hidden的应用对象只保留并渲染该对象的尺寸
3.display:hidden的应用对象暂时不保留也不渲染该对象
作者: webdesigning 发布时间: 2010-09-16
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28