对于 IE quirk 模式下的盒模型就不说了,相信都很清楚,那就看看同处于标准模式下也有不同之处。
代码1:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>
test
</title>
</head>
<body>
<div id="t1" style="border:1px solid green;padding:100px;height:100px;width:100px;overflow:auto;">
<div style="border:1px solid red;padding:22px;height:300px;width:50px;margin:133px;" id="t2">
</div>
</div>
<script type="text/javascript">
alert('parent clientHeight :'+document.getElementById('t1').clientHeight
+'\n'+'parent offsetHeight :'+document.getElementById('t1').offsetHeight
+'\n'+'parent scrollHeight :'+document.getElementById('t1').scrollHeight
+'\n'+'parent clientWidth :'+document.getElementById('t1').clientWidth
+'\n'+'parent offsetWidth :'+document.getElementById('t1').offsetWidth
+'\n'+'child offsetTop :'+document.getElementById('t2').offsetTop
+'\n'+'child offset to parent :'+(document.getElementById('t2').getBoundingClientRect().top-document.getElementById('t1').getBoundingClientRect().top));
</script>
</body>
</html>
IE6 明显应该错误
子元素将父元素的 content 撑大了
IE7 , 8
子元素没有将父元素的 content 撑大了,但是父元素 scrollHeight 仍然增加了。
firefox
子元素没有将父元素的 content 撑大了,父元素 scrollHeight 也没有增加了,应该是对的。
代码2:
将上述代码的 t1 div 的 overflow 改为 auto
IE系列
子元素 margin-top 和父元素 padding-top 合并,取最大值133,但是 margin-bottom 没有和 父元素padding-bottom 合并,故得133+100=233,总的scrollheight= 133+22+300+22+2+233=712
更新2009-10-10:可能是BUG
,当父元素任何内容时,子元素 margin-top 和父元素 padding-top合并取最大值,但是当父元素有内容时,scrollHeight仍然计算错误,但是 getBoundingClientRect().top 父子差值正确了。
Firefox3
子元素margin-top和 父元素padding-top 没有合并,取133+100 ,但是 margin-bottom 和父元素 padding-bottom 都没了,取0,得 133+100+22+300+22+2=579
更新 2009-10-10 : 真的是 Bug
,firefox 3.5 修正了,margin-bottom 和 padding-bottom 又出来了,现在显示 scrollHeight : 819
附录:
脚本获得元素的视觉信息规范:CSSOM
1.相对定位下的所有属性图解
总结:
1.1
offsetWidth 等比 clientWidth 等多了边框和滚动条的计算。
1.2
offsetTop 等为当前元素 border 外侧到包含块 border 内侧的距离。
1.3
顺带说一下 getBoundingClientRect() 为当前元素 border 外侧相对浏览器视窗(即不包括滚屏长度)的位置 ,和浏览器模式无关
1.绝对定位
基本上同上图,但是 top 等定义为 当前元素 margin 外边到其包含块 border 内侧的距离。
- 大小: 18.7 KB
- 大小: 18.5 KB
- 大小: 10.8 KB
- 大小: 20.5 KB
- 大小: 13.7 KB
- 大小: 37.5 KB
分享到:
相关推荐
BlueBala » 兼容IE和Firefox的事件模型(拖动)
2010-8-18 去腾讯面试,问IE6。...结论:标准模式时,IE6浏览器采用W3C盒子模型,此时IE6、Firefox表现一致。 代码: 复制代码代码如下: <!DOCTYPE html PUBLIC “-//W3C//DTD XHTML 1.0 Transitional
1.DOM上的接口基本上还是一致的,但经测试发现mozilla下的DOM更标准些,就算些法一样,IE下会有一些微小的区别,但无关要紧 2.事件模型上,这方面区别... mozilla下的e.which与ie下的event.keyCode相当 相对应的还有e.l
这也造成了在不同的浏览器中处理event的差异,这里结合一些零碎的代码来说明如何做到event在IE4+和Firefox下的正常工作。首先看如下代码: 代码如下: function doEventThing(eventTag){ var event = eventTag||...
本代码适用浏览器:搜狗、360、FireFox、Chrome、Safari、Opera、傲游、世界之窗,不支持IE8及以下浏览器。有兴趣的朋友们可以来下载试试吧。本段代码兼容目前最新的各类主流浏览器,是一款非常优秀的特效源码。希望...
做前端开发的过程中对JS的调试一直没有很好用的工具,所幸的是Firefox下的firebug的诞生给我们带来了数不清的方便,但是在IE下想要调教好JS还是一样的繁琐无奈,遵照IE提示的JS错误提示在代码里找到的却让人...
因为安全问题 1、为firefox dom模型扩展属性 2、currentStyle属性可以取得实际的style状态 3、IE实现innerText时考虑了display方式,如果是block则加换行 4、为什么不用textContent?因为textContent没有考虑元素的...
因为安全问题 1、为firefox dom模型扩展属性 2、currentStyle属性可以取得实际的style状态 3、IE实现innerText时考虑了display方式,如果是block则加换行 4、为什么不用textContent?因为textContent没有考虑元素的...
js调试工具推荐firefox的firebug插件 能够给js设置断点执行 能够运行时修改css样式 查看dom模型等 ☆IE8自带的developerbar也很不错 ☆打开firefox所有js警告:在地址栏里录入:about:config双击,设置...
包含常见IE与Firefox兼容性问题的解决方案及示例,还有一个标准的DOM帮助文档。非常有助于前端WEB程序开发
兼容IE 6、IE 8 和Firefox 3 等浏览器 支持SQL Server、Oracle和MySQL等主流数据库 支持的表关系模型包括 1、单表数据模型 2、自连接数据模型 3、一对多(父子表)数据模型 4、一对多数据模型中的一张表是自连接...
兼容IE 6、IE 8 和Firefox 3 等浏览器 支持SQL Server、Oracle和MySQL等主流数据库 支持的表关系模型包括 1、单表数据模型 2、自连接数据模型 3、一对多(父子表)数据模型 4、一对多数据模型中的一张表是自连接...
7. firefox与IE的父元素(parentElement)的区别 3 8. document.formName.item(”itemName”) 问题 3 9. 集合类对象问题 3 10. 自定义属性问题 3 11. input.type属性问题 3 12. event.srcElement问题 3 13. body...
(IE6.0/IE7.0/firefox1.5/firefox2.0/opera9/Safari2.0,Safari缺乏测试)。它可以帮助程序开发者实现各种类型的RIA应用-在提供更加强大框架的同时更加易用。压缩的核心代码仅仅50k,包括了javascript类型检查,强制...
DESTOON B2B网站管理系统简介 ...基于最新Web标准构建,在各主流浏览器(IE/FireFox/Opera等)上运行良好 DESTOON B2B网站管理系统前台截图 DESTOON B2B网站管理系统后台截图 相关阅读 同类推荐:站长常用源码
今天在网上看到了微软公布了一个IE8和其他2款浏览器:Firefox和GoogleChrome的速度对比的白皮书和视频,感叹于IE8的高效和稳定。首先我们看一下IE7的进程模型(图片引自于IE8TeamBlog)在Vista的IE7当中(注:不能是XP...