众所周知,IE家族有Quirks模式和Standards模式,2种模式对盒的解析不同,Quirks模式内容的宽度为width-borderWidth-padding,而Standards模式内容的宽度即为width。然后,不同的IE版本也未必完全根据compatMode来适用两种模式,比如没打过补丁的IE6,即使是CSS1Mode,也还是使用Quirks模式。

那么,如何使用JS来检测呢?根据上面描述的特点,我们可以很容易检测,在页面中通过 position: absolute; top: -1000px; left: -1000px 来创建一个在页面以外的div,并且指定 width: 5px; height: 5px; padding: 2px (其实实际数值可以很随意啦,我有强迫症,习惯用5/2这种),插入到body之后,取到它的 offsetWidth,如果为5则当前页面为Quirks模式,如果为9则为Standards模式。

准确判断出了浏览器的模式,就可以轻松使用特定的样式来保证展现的一致了。

当然,我个人更建议通过一些页面技巧来规避这个问题:指定宽度的div不指定padding和border,而在其父容器或子容器来指定padding和border,这样即可保证在两种模式下对盒的解释大体一致,不会出现较多差异。

posted on 2012-02-28 20:47  费神  阅读(212)  评论(0编辑  收藏  举报