IE7不理解display:inline-block

有人可以帮我把我的头绕过这个bug吗? 与Firefox的工作正常,但与Internet Explorer 7不是。 似乎不懂display: inline-block;

HTML:

 <div class="frame-header"> <h2>...</h2> </div> 

CSS:

 .frame-header { height:25px; display:inline-block; } 

IE7 display: inline-block; 破解如下:

 display: inline-block; *display: inline; zoom: 1; 

默认情况下,IE7只支持自然inline元素( Quirksmode Compatibility Table )的inline-block ,所以你只需要对其他元素进行破解。

zoom: 1在那里触发hasLayout行为,我们使用star属性hack来设置display inline只在IE7和更低(较新的浏览器将不适用)。 hasLayoutinline在一起基本上会触发IE7中的行inline-block行为,所以我们很高兴。

这个CSS不会被验证,并且可以让你的样式表弄乱,所以通过条件注释使用IE7样式表可能是一个好主意。

 <!–-[if IE 7]> <link rel="stylesheet" href="ie7.css" type="text/css" /> <![endif]–-> 

更新

由于没有人使用IE6和7,我将提出一个不同的解决方案:
你不需要破解,因为IE8 自己支持它

对于IE8之前那些必须支持石器时代浏览器的人来说(IE8不是那么老,太咳嗽了 ):
对于IE版本控制的账号,在他的文章中使用像Paul Irish states这样的<html>标签中的一些条件类

 <!--[if IE 7]><html class="no-js lt-ie9 lt-ie8"><![endif]--> <!--[if IE 8]><html class="no-js lt-ie9"><![endif]--> <!--[if gt IE 8]><!--><html class="no-js"><!--<![endif]--> 

通过这个,你将在不同的IE浏览器的html标签中有不同的类

你需要的CSS如下

 .inline-block { display: inline-block; } .lt-ie8 .inline-block { display: inline; zoom: 1; } 

这将验证,你不需要额外的CSS文件


老答案

 .frame-header { background:url(images/tab-green.png) repeat-x left top; height:25px; display:-moz-inline-box; /* FF2 */ display:inline-block; /* will also trigger hasLayout for IE6+7*/ } /* Hack for IE6 */ * html .frame-header { display: inline; /* Elements with hasLayout and display:inline behave like inline-block */ } /* Hack for IE7 */ * + html .frame-header { display: inline; /* Elements with hasLayout and display:inline behave like inline-block */ } 

IE7不支持“inline-block”正确,更多信息在这里: LINK
使用可以使用:'inline'代替。

你究竟想达到什么目的? 举个例子,放在这里: http : //jsfiddle.net/

使用内联,它适用于这种列表项的选择器:

 ul li {} 

或者是具体的:

 ul[className or name of ID] li[className or name of ID] {}