CSS菜单与IE8和Chrome/Firefox/Opera的框模型差异



我认为IE7及以上版本遵循与Chrome/Firefox/Opera相同的盒子模型,但当我在IE8中运行以下代码,然后在Chrome/Firefox/Opera中运行时,我得到不同的结果。

在IE8中,框的末尾显示出一点我想去掉的唇形。是否可以严格使用CSS来解决我的问题,或者我是否需要使用Javascript来检测浏览器,然后更改CSS?

这里是链接到我正在使用的代码。为了看到我的问题,你需要使用IE,然后使用Chrome, Firefox或Opera。

http://jsfiddle.net/LsXTk/1/

IE7有兼容模式和标准模式两种模式。微软在IE方面又迈出了一大步。(是的,我是在讽刺):

http://blogs.msdn.com/b/chkoenig/archive/2008/08/28/ie8-standards-mode-and-ie7-compatibility-mode.aspx

通常绊倒人们的是,默认情况下,如果页面是在本地或从网络上的服务器加载的,IE8会恢复到兼容(即中断)模式。我猜逻辑是,它一定是你内部网上的一个页面,因为90%的内部网软件都是可怕的IE6怪物编码,在任何标准浏览器中都几乎崩溃,最好假设代码被破坏并恢复到兼容模式。

至于检测IE8,你可以通过IE的条件注释不使用JavaScript。我通常做的是将开始正文标签包装在条件中,并给每个条件一个唯一的ID:

<!--[if !IE]> -->
    <body>
<!--<![endif]-->
<!--[if gt IE 8]> 
<body id="IE9">
<![endif]-->
<!--[if IE 8]>
    <body id="IE8">
<![endif]-->
<!--[if IE 7]>
    <body id="IE7">
<![endif]-->
<!--[if lt IE 7]>
    <body id="IE6">
<![endif]-->

然后在你的css中,你可以很容易地根据需要提供单独的css:

.myStyle {for good browsers}
#ie7 .myStyle {fix for IE7}

最新更新