Make container shrink-to-fit child elements as they wrap
In CSS, the parent container doesn't know when its children wrap. Hence, it continues scaling its size oblivious to what's going on inside.
Put another way, the browser renders the container on the initial cascade. It doesn't reflow the document when a child wraps.
That's why the container doesn't shrink-wrap the narrower layout. It just continues on as if nothing wrapped, as evidenced by the reserved space on the right.
The maximum length of the horizontal white space is the length of the element(s) that the container was expecting to be there.
In the following demo, whitespace can be seen coming and going as the window is re-sized horizontally: DEMO
You'll need a JavaScript solution (see here and here)... or CSS media queries (see here).
When dealing with wrapping text, text-align: right
on the container may be helpful in some cases.
Have a good look at my Fiddle in which I changed:
-
.holder
width
tomax-width
(in.v
classes) - modified
.holder
towrap
andspace-around
its children - added 2 more
.v
classes for clarity - removed the
<br>'s
- and, most importantly, added
flex: 0 0
to.child
Flexbox almost always needs max-width
to be set, which is more flexible than width
.
Depending on how you need the .child
ren to behave, modify the flex-grow
and flex-shrink
in flex: 0 0
to meet your needs. (the result of flex: 1 0
looks nice too)
...no Javascript needed...
UPDATE The Codrops Flexbox Reference really helped me a lot understanding FBL...