Bootstrap with different order on mobile version
Because Bootstrap 4 uses flexbox, the columns are always going to be equal height, and you'll not be able to get the desktop (lg) layout that you want.
One option is to disable the flexbox for lg
. Use floats so that the 1,3 columns naturally pull to the right, since 2 is taller. The flexbox order-
will work on mobile.
https://codeply.com/go/8lsFAU3C5E
<div class="container">
<div class="row d-flex d-lg-block">
<div class="col-lg-8 order-1 float-left">
<div class="card card-body tall">2</div>
</div>
<div class="col-lg-4 order-0 float-left">
<div class="card card-body">1</div>
</div>
<div class="col-lg-4 order-1 float-left">
<div class="card card-body">3</div>
</div>
</div>
</div>
How this works
- Keep columns in the same row, since ordering is relative to parent
- The
d-flex d-lg-block
disables flex onlg
and up - The
float-left
float the columns when flex is disabled - The
order-*
reorder the columns when flex is enabled
Another option is some flexbox wrapping hack that uses w-auto
...
https://codeply.com/go/mKykCsBFDX
Also see:
How to fix unexpected column order in bootstrap 4?
Bootstrap Responsive Columns Height
B-A-C -> A-B-C
To achieve that in Bootstrap 4, you need the order-lg-first
class for the "2" column and the offset-lg-8
class for the "3" column (assuming they are ordered 1-2-3 in the HTML).
The offset-lg-8
class will offset (i.e. push to the right) the third column by 8 units (=the same as the width of the second column) on screens that are large (lg
) or larger thus producing the desired result.
Here's a working code snippet (click "run code snippet" below and expand to full page):
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/css/bootstrap.min.css" integrity="sha384-Gn5384xqQ1aoWXA+058RXPxPg6fy4IWvTNh0E263XmFcJlSAwiGgFAW/dAiS6JXm" crossorigin="anonymous">
<div class="container">
<div class="row">
<div class="col-lg-4 bg-warning">1</div>
<div class="col-lg-8 order-lg-first bg-secondary">2</div>
<div class="col-lg-4 offset-lg-8 bg-warning">3</div>
</div>
</div>