两个内联块,宽度50%的元素包裹到第二行

Dan*_*lon 147 html css

我想有两列50%宽度的空间,并避免浮动.所以我想用display:inline-block.

当元素增加到99%宽度(例如50%,49%,http://jsfiddle.net/XCDsu/2/)时,它按预期工作.

当使用100%宽度(例如50%,50%,http://jsfiddle.net/XCDsu/3/)时,第二列会断开第二行.

这是为什么?

tw1*_*w16 292

这是因为display:inline-block在html中考虑了空白区域.如果你删除div它之间的空白,它按预期工作.实例:http://jsfiddle.net/XCDsu/4/

<div id="col1">content</div><div id="col2">content</div>
Run Code Online (Sandbox Code Playgroud)

  • 当你阅读它时听起来很愚蠢......它就是诀窍!令人惊讶的是,在css3之后仍然表现得像这样,因为它听起来像是一个bug (6认同)

Ada*_*dam 106

您可以通过删除使用CSS空格空格,这样可以保持你的漂亮的HTML布局.如果您希望文本包含在列内,请不要忘记再次将空白区域恢复正常.

在IE9,Chrome 18,FF 12中测试过

.container { white-space: nowrap; }
.column { display: inline-block; width: 50%; white-space: normal; }

<div class="container">
  <div class="column">text that can wrap</div>
  <div class="column">text that can wrap</div>
</div>
Run Code Online (Sandbox Code Playgroud)

  • 使用无包装会使列彼此相邻,但会产生不合需要的填充,从容器中分离出来.**我的建议下面没有这个问题**,这是一个实例:http://jsbin.com/openuh/2 (10认同)

Phi*_*tts 34

注意:在2016年,您可以flexbox更轻松地使用它来解决此问题.

这种方法可以正常运行IE7 +和所有主流浏览器,它已经在许多复杂的基于视口的Web应用程序中进行了尝试和测试.

<style>
    .container {
        font-size: 0;
    }

    .ie7 .column {
        font-size: 16px; 
        display: inline; 
        zoom: 1;
    }

    .ie8 .column {
        font-size:16px;
    }

    .ie9_and_newer .column { 
        display: inline-block; 
        width: 50%; 
        font-size: 1rem;
    }
</style>

<div class="container">
    <div class="column">text that can wrap</div>
    <div class="column">text that can wrap</div>
</div>
Run Code Online (Sandbox Code Playgroud)

现场演示:http://output.jsbin.com/sekeco/2

这种IE7/8方法的唯一缺点是依赖于body {font-size:??px}基于em /%的字体大小调整.

可以使用IE的条件注释来提供IE7/IE8特定的CSS


thi*_*dot 14

inlineinline-block元素受HTML中的空格影响.

解决您的问题,最简单的方法是删除空格之间</div><div id="col2">,请参阅:http://jsfiddle.net/XCDsu/15/

还有其他可能的解决方案,请参阅:bikesheding CSS3属性替代方案?