IE8显示inline-block不起作用。

49

假设我有以下代码

<style type="text/css" media="all">
  span, ul, ul li {
    display: inline-block;
    vertical-align: top;
    margin: 0;
    padding: 0;
    list-style: none;
  }   
</style>
<span>i would want</span>
<ul>
  <li>this</li>
  <li>on</li>
  <li>one line.</li>
</ul>

我希望在 IE8 中将此内容显示为内联。我在多处阅读了所有内容,都说这应该可以工作,IE8 支持 inline-block。然而,经过一个上午的尝试,我无法让它对齐。我知道我可以浮动它,但是由于页面上的其他元素(未在此处显示)我需要使用“clearfix”,这会增加标记。我只需要针对IE8进行设置,并想知道为什么 inline-block 对我不起作用,而显然它是被支持的。当在 Google Chrome 中查看时,上述代码会产生我想要的效果。


最佳答案在这里:https://dev59.com/5Ww15IYBdhLWcg3wT51c - Marcus
7个回答

50

我猜测你没有声明文档类型。试着把这行代码放在html标签之前:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

你粘贴的代码在使用该文档类型(doctype)的情况下可以在IE8中运行。


3
我爱你,这让我省去了很多IE头疼的麻烦! - Iazel
哇!该死,我每次都忘记了。 - Chris
@Iazel 你是指IE的兼容性问题吗? - Cristian E.
谢谢,我担心我得去搜索答案。 - Javacadabra

37

并非所有IE8版本都能够正常工作。我发现,即使有DOCTYPE声明,给定的代码在IE 8.0.6001.18702(早期版本)中也无法正常工作。

然而,对于较低版本的IE来说,解决方法同样适用于该特定版本的IE 8:

<!--[if lt IE 8]>
<style type="text/css">
    li { display: inline; }
</style>   
<![endif]-->

这个完美地运作了,我只是添加了!important来覆盖它,在IE中似乎inline实际上是inline-block。谢谢! - formatc
偶然发现这个,对我有用,inline确实是inline-block。谢谢。 - Samuel
很棒,这对我有用,我也遇到了同样的问题,Windows 7 IE 8和inline-block不起作用。 - JorgeeFG
完全一样!我也有完全相同版本的IE,但DOCTYPE本身不起作用。 - Tomas
请注意,inline-block对于内联元素(如span、em等)在IE中受到支持,没有这些问题。有关更多信息,请参见此处:https://dev59.com/RWjWa4cB1Zd3GeqPuM16#16462251。 - Tomas
23
仅当IE8处于兼容性视图中,即IE7仿真模式下才会发生这种情况。这不是不同版本的IE8之间的问题,而是渲染模式不正确的问题。即使使用DOCTYPE,这种情况发生也并不奇怪,因为IE7及更早版本一直存在这个问题。此外,8.0.6001.18702是RTM版本,不是早期版本,但这也不相关,因为从第一个beta版开始就已经完全支持“display: inline-block”。解决这个问题的正确方法是 <meta http-equiv="X-UA-Compatible" content="IE=edge"> - BoltClock

18

你可以设置 margin-right:1px

对我来说非常有效。


2
这绝对是所有答案中最好的选择。非常棒的提示! - Abe Petrillo
已删除损坏的链接(http://www.compsoft.co.uk/Blog/2009/11/inline-block-not-quite-inline-blocking.html)。他们似乎更改了网站,无法再找到该帖子。 - mentat
3
网络档案库助力救援:Web archive for the rescue - Kos
你难道不喜欢IE吗 :-/ - Kevin Shea

13

根据我的经验,使用通用的方式(IE6+)声明内联块总是一个更好的选择。即使你的目标是较新的浏览器,每次我试图说它只支持较新的浏览器,一些客户仍会干扰他们的文档类型,然后销售人员说需要修复它,因为客户仍然可以看到它并且不明白,这取决于他们的IE设置而不是我们的问题。此外,当你在结构化内容中使用内联块时,它可以防止在某些原因下用户使用旧版IE查看网站时使网站完全分解。

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

这是惯用语!就像 if (var i < 0; i y x.length; i++) - yunzen
@HerrSerker 不知道你的意思是什么,但这就是如何以IE6+的方式获得inline-block(不管你喜不喜欢)。 - Idra
没错,这正是我的意思。你应该像学习 JS 循环结构一样学习它。 - yunzen
18
“Idiomatic”,但您写成了if而不是for… @HerrSerker 的意思是“习惯用语”,但您把 if 改成了 for - Ry-
1
我使用 display: inline; display: inline-block; *zoom: 1; -- IE 将忽略第二个显示规则,缩放仅适用于旧版IE。 - Tom McKenzie
显示剩余3条评论

9

如果您不使用浮动,IE8将把它视为块级元素。

.divInlineBlock
{
   display: inline-block;
   float: left;
}   

5
请注意,如果您查看内部网站,则IE8将像IE7一样运行,这在开发过程中可能会发生!请参见此StackOverflow问题: IE8 Rendering as IE7 By Default?

3
针对IE8 - 您可以添加一个特定的声明:display: inline-table;。这个声明非常有用。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接