.parent{ width:100%; display:flex; flex-direction:row; flex-wrap:nowrap; padding:1em; background-color:red; box-sizing:border-box; } .child1{ background-color:mistyrose; padding:1em; } .child2{ background-color:powderblue; padding:.5em; word-wrap:break-word; max-width:500px; } .child3{ background-color:powderblue; padding:.5em; word-wrap:break-word; }
<div class="parent"> <div class="child1"> question </div> <div class="child2"> somethingsomethingsomethingsomethingsomethingsomethingsomethingsomethingsomethingsomethingsomethingsomethingsomethingsomethingsomethingsomethingsomethingsomethingsomethingsomethingsomethingsomethingsomethingsomethingsomethingsomethingsomethingsomethingsomethingsomethingsomethingsomethingsomethingsomethingsomethingsomethingsomethingsomethingsomethingsomethingsomethingsomethingsomethingsomethingsomethingsomethingsomethingsomethingsomething </div> </div> <div class="parent"> <div class="child1"> question </div> <div class="child3"> somethingsomethingsomethingsomethingsomethingsomethingsomethingsomethingsomethingsomethingsomethingsomethingsomethingsomethingsomethingsomethingsomethingsomethingsomethingsomethingsomethingsomethingsomethingsomethingsomethingsomethingsomethingsomethingsomethingsomethingsomethingsomethingsomethingsomethingsomethingsomethingsomethingsomethingsomethingsomethingsomethingsomethingsomethingsomethingsomethingsomethingsomethingsomethingsomething </div> </div>
The main issue with the above code is ,child3
overflows but if I give a max-width
in child2
it will not overflow the parent
. In both cases I used word-wrap: break-word;
You can check the code here http://jsfiddle.net/vbj10x4k/
I need to know why it happens and how to solve it without using max-width/width
to fixed pixel values.I need it to be responsive.
As you only want the text itself to wrap you need to use flex-wrap: nowrap; to keep . right on the same line. The text will automatically wrap when there is not enough space.
The word-break property in CSS is used to specify how a word should be broken or split when reaching the end of a line. The word-wrap property is used to split/break long words and wrap them into the next line.
If you are using flexbox and want the content to wrap, you must specify flex-wrap: wrap . By default flex items don't wrap. To have the images be three-across, you should specify flex-basis: 33.33333% .
Instead of setting a max-width for your flex item, use a min-width declaration.
By default, if no min-width is set, the item's content min-width is assumed and the flex item's width will never be smaller. By setting a min-width of e.g. 40%, the item will shrink to at most 40% of the flex parent.
.child2, .child3 { min-width: 40%; }
.parent{ width:100%; display:flex; flex-direction:row; flex-wrap:nowrap; padding:1em; background-color:red; box-sizing:border-box; } .child1{ background-color:mistyrose; padding:1em; } .child2{ background-color:powderblue; padding:.5em; word-wrap: break-word; overflow-wrap: break-word; min-width: 40%; } .child3{ background-color:lightyellow; padding:.5em; word-wrap: break-word; overflow-wrap: break-word; min-width: 40%; }
<div class="parent"> <div class="child1"> question </div> <div class="child2"> somethingsomethingsomethingsomethingsomethingsomethingsomethingsomethingsomethingsomethingsomethingsomethingsomethingsomethingsomethingsomethingsomethingsomethingsomethingsomethingsomethingsomethingsomethingsomethingsomethingsomethingsomethingsomethingsomethingsomethingsomethingsomethingsomethingsomethingsomethingsomethingsomethingsomethingsomethingsomethingsomethingsomethingsomethingsomethingsomethingsomethingsomethingsomethingsomething </div> <div class="child3"> Works well with long URLs: <a href="#"> https://thisisadamnlongurlcontainingneitherhyphensoradditionalperiods.com</a> </div> </div>
See the code snippet above or the external demo: http://jsfiddle.net/vbj10x4k/5/
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With