两个内联块单元,每个50%宽,不能并排放在一行中
<!DOCTYPE html> <html> <head> <title>Width issue</title> <style type="text/css"> body { margin: 0; } #left { width: 50%; background: lightblue; display: inline-block; } #right { width: 50%; background: orange; display: inline-block; } </style> </head> <body> <div id="left">Left</div> <div id="right">Right</div> </body> </html>
JSFiddle: http : //jsfiddle.net/5EcPK/
上面的代码试图将#left div和#right div并排放在一行中。 但是,正如你在上面的JSFiddle URL中看到的,事实并非如此。
我能够解决这个问题,将其中一个div的宽度降低到49%。 请参阅http://jsfiddle.net/mUKSC/ 。 但是这不是一个理想的解决scheme,因为两个div之间出现了一个小的差距。
我能解决这个问题的另一个方法是通过浮动这两个divs。 请参阅http://jsfiddle.net/VptQm/ 。 这工作正常。
但我原来的问题依然存在。 为什么当这两个div被保留为内联块元素时,它们并不相配?
使用inline-block
元素时, 这些元素之间总是会有whitespace
问题 (空间大约为4px)。
所以,你的两个divs
都有50%的宽度,再加上这个whitespace
(〜4px)的宽度是100%以上,所以它就打破了。 你的问题的例子:
body{ margin: 0; /* removing the default body margin */ } div{ display: inline-block; width: 50%; } .left{ background-color: aqua; } .right{ background-color: gold; }
<div class="left">foo</div> <div class="right">bar</div>
在css3中的好答案是:
white-space: nowrap;
在父节点中,并且:
white-space: normal; vertical-align: top;
在div(或其他)在50%
例如: http : //jsfiddle.net/YpTMh/19/
编辑:
有另一种方式:
font-size: 0;
为父节点,并在子节点覆盖它
这是因为你的两个div之间的空白被解释为一个空格。 如果你把你的<div>
标签按照下面的方式排列,则问题得到纠正 :
<div id="left"></div><div id="right"></div>
因为元素之间有一个空格。 如果你删除所有的空白, 他们将适合 。
<div id="left">Left</div><div id="right">Right</div>
要么让他们阻止,而不是内联块。 这将使div忽略它们之间的空间。
display:block;
或删除标签之间的空间
<div id='left'></div><div id='right'></div>
或添加
margin: -1en;
到其中一个divs,以减轻单个空间的渲染空间。
可以通过添加css显示来完成:内联到包含内联元素的div。
使用具有负值的边距去除空白时,需要将其添加到此特定元素。 因为将它添加到一个类将会影响这个类已被使用的地方。
所以使用display会更安全:inline;