I'm trying to position a few elements in a row, so that they all fit in the width of the container. To prevent them from word-wrapping I added "white-space: nowrap" to the parent, and added "white-space: normal" to the children to allow them to wrap the text (as desired).
The problem is that with this configuration the right most child sometimes exceeds the width of the parent.

HTML:
<div id="container">
<div class="child">
child 1
</div>
<div class="child">
child 2 text that might be long enough to wrap, but still exceed the parent
</div>
</div>
CSS:
#container {
white-space: nowrap;
width: 200px;
background: yellow;
border: 1px solid brown;
padding: 5px;
}
.child {
display: inline-block;
border: 2px solid red;
vertical-align: top;
white-space: normal;
}
http://jsfiddle.net/7e5TU/1/ (change the length of the text if the problem doesn't appear straight away).
I know that I can solve it with a table, and probably with a float on the left child, and "overflow: hidden" on the right, but I see no reason why this should not work.
Could anyone provide some insights? I'd mostly love to understand what in the box model causes this behavior. Thanks!
white-space: nowrap;for the parent, you've collapsed the whitespaces between inline(-block) elements.white-spacetreats the children, not the element itself. - Hashem Qolamiwhite space inside the elementmeans between inline nodes whether the text itself or inline(-block) elements. - Hashem Qolamiwhite-spaceyour HTML markup plays an important role, because any line breaks, white spaces, tabs or new lines will effect the rendering. Google will give you lots of resources about this. And yes, expanding up to the parents width (minus a given padding of the parent) is the normal behaviour forinline-blockelements. - Netsurfer