I have been trying to wrap text around an image using bootstrap's grid system to limit the width of the image. The general layout would be a lot like this.

I am currently using
<div class="row">
<div class="col-xs-12 col-sm-5">
<img class="img-responsive" src="{{$blogPost->getImagePath()}}" width="100%">
</div>
<div class="col-xs-12 col-sm-7">
<div class="row">
<div class="col-sm-6">
<h2>{!!$blogPost->title!!}</h2>
</div>
<div class="col-sm-6">
<h3 class="pull-right">
{{$blogPost->created_at}}
</h3>
</div>
</div>
{!! Purifier::clean($blogPost->message) !!}
</div>
<div class="col-xs-12">
<hr />
</div>
</div>
This code results in the following layout.

I have tried removing the second column and only keeping the column in which the image is nested.
<div class="row">
<div class="col-xs-12 col-sm-5">
<img class="img-responsive" src="{{$blogPost->getImagePath()}}" width="100%">
</div>
<div class="row">
<div class="col-sm-6">
<h2>{!!$blogPost->title!!}</h2>
</div>
<div class="col-sm-6">
<h3 class="pull-right">
{{$blogPost->created_at}}
</h3>
</div>
</div>
{!! Purifier::clean($blogPost->message) !!}
<div class="col-xs-12">
<hr />
</div>
</div>
This will result in other unexpected text placement as can be seen here.

How can I achieve the desired effect and keep using the bootstrap grid system to set the width of my image in regards to the size of the viewport?
<div class="row">
<div class="col-xs-12 col-sm-5">
<img class="img-responsive" src="{{$blogPost->getImagePath()}}" width="100%">
</div>
<div class="col-xs-12 col-sm-7">
<div class="row">
<div class="col-sm-6">
<h2>{!!$blogPost->title!!}</h2>
</div>
<div class="col-sm-6">
<h3 class="pull-right">
{{$blogPost->created_at}}
</h3>
</div>
</div>
</div>
{!! Purifier::clean($blogPost->message) !!}
<div class="col-xs-12">
<hr />
</div>
</div>
Wrapping the title and created at date in a new column to compliment the width of the image and setting all the other text outside any column did the trick for me.
A small downside is that the margins don't line up but I am sure I'll find a fix for that using some custom CSS.

the answer from @milo526 works pretty good, there is just a small flaw given by the negative margins of row and no margins for the text. you can add a div wrapping the text with the margins or paddings half your gutter-width or using a col-sm-12 with no float. Another small flaw is given by not enough margins between image and text, because of that you should add an extra right padding to the image. I put this adjustments in inline style, so they are visible.
<div class="row">
<div class="col-sm-5" style="padding-right:30px;">
<img class="img-responsive" src="{{$blogPost->getImagePath()}}" width="100%">
</div>
<div class="col-sm-7">
<div class="row">
<div class="col-sm-6">
<h2>{!!$blogPost->title!!}</h2>
</div>
<div class="col-sm-6">
<h3 class="pull-right">
{{$blogPost->created_at}}
</h3>
</div>
</div>
</div>
<div class="col-sm-12" style="float: none;">
{!! Purifier::clean($blogPost->message) !!}
</div>
<div class="col-sm-12">
<hr />
</div>
</div>
https://codepen.io/davdenic/pen/bPGRqa
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