html - How can I wrap flexbox children so that multiple children are stacked next to another child? -


i have table-like layout using flexbox:

+--------------+---------------+-----------------+---------------+ |      1       |       2       |        3        |       4       | |              |               |                 |               | +--------------+---------------+-----------------+---------------+ 

as page gets smaller, i'd wrap content end this:

+--------------+-------------------------------------------------+ |              |                        2                        | |              |                                                 | |              +-------------------------------------------------+ |      1       |                        3                        | |              |                                                 | |              +-------------------------------------------------+ |              |                        4                        | |              |                                                 | +--------------+-------------------------------------------------+ 

i tried use flex-wrap: wrap , extend width of trailing children force them wrap, produces like:

+-----------+--------------------------------------+ |           |                   2                  | |           |                                      | |     1     +--------------------------------------+ |           | |           | +-----------+--------------------------------------+ |                        3                         | |                                                  | +--------------------------------------------------+ |                        4                         | |                                                  | +--------------------------------------------------+ 

this current attempt:

.container {    display: flex;    flex-wrap: wrap;  }    .controls {    flex: 0 0 25%;    max-width: 25%;    }    .name, .artist, .album {    flex: 0 0 75%;    max-width: 75%;  }    @media screen , (min-width: 600px) {      .name, .artist, .album {      flex: 0 0 25%;      max-width: 25%;    }  }
<div class="container">    <div class="controls">play</div>    <div class="name">name</div>    <div class="artist">artist</div>    <div class="album">album</div>  </div>

(jsfiddle)

i'd prefer pure css solution works in ie11+.

consider using nested flex container switches items 2, 3 , 4 column on smaller screens.

here's example based on code:

html

<div class="container">     <div class="controls">play</div>     <div class="inner-container"><!-- nested flex container -->         <div class="name">name</div>         <div class="artist">artist</div>         <div class="album">album</div>     </div> </div> 

css

.container {     display: flex;     flex-wrap: wrap; }  .inner-container {     display: flex;     flex: 0 0 75%; }  .controls {     flex: 0 0 25%; }  .name, .artist, .album {     flex: 1; }  @media screen , (max-width: 600px) {      .inner-container { flex-direction: column; }      .controls { align-self: center; } } 

revised fiddle


Comments

Popular posts from this blog

sublimetext3 - what keyboard shortcut is to comment/uncomment for this script tag in sublime -

post - imageshack API cURL -

dataset - MPAndroidchart returning no chart Data available -